はじめに
前回は、Visual Studio Codeを使ったデータベース「SQLite3」を解説。その後、PythonでプログラミングしてSQLite3を解説しました。
今回は、いよいよ「一筆書きBBS」のWebサイトを作っていきます。今回は1番シンプルなWebページである「アバウトページ」を作ります。アバウトページでは、このサイトについての紹介と、アクセスするたびにランダムなarticle(記事)のベジェ曲線の一筆書き図形を表示します。
最初は、前回作成した三角形のベジェ曲線図形しか出てきません。しかし、お絵描きページを作ってお絵描きを保存できるようになったら、さまざまなベジェ曲線図形が出てきます。実は、お絵描き自体はどのページでもできますが、お絵描きページでなければ作成したベジェ曲線データはデータベースに保存できません。
index.pyファイルを用意する
基本的に一筆書きBBSでは「index.py」ファイルだけが実行ファイルになります。これに「index.py?page=home」や「index.py?page=about」などとリンクで「GET」してページを遷移します。まずは次の図のようなメニューだけのアバウトページを作ります。

.pyファイルをCGIにハンドラーを追加する
いつものように「.htaccess」ファイルを用意します。これがないと.pyファイルをCGIスクリプトとして実行することができません。
AddHandler cgi-script .py DirectoryIndex index.py
about.pyファイルをコーディングする
後ほどindex.pyファイルから呼び出すために、「pages」→「about.py」ページの「html」関数をコーディングします。まだ引数の「cur」は使っていません。
def html(cur): print(''' <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>アバウト - 一筆書きBBS</title> <link href="css/pc.css" rel="stylesheet" type="text/css" /> <link href="css/mobile.css" rel="stylesheet" type="text/css" media="only screen and (max-width:1023px)" /> <script type="text/javascript" src="js/main.js"></script> </head> <body> <div id="left"> ''')
サンプルコードの解説
html関数で、クライアントのWebブラウザに送るHTML5文書の途中まで出力します。HTML5文書の残りはindex.pyファイルで続きを出力します。
index.pyファイルをコーディングする
次のサンプルコード[1]「index.py」をコーディングしたら、XAMPPのローカルサーバでindex.pyを実行してください。macOSやLinuxの場合はindex.pyに実行権限のパーミッションを与えてください。まだデータベースは使いませんが、記事を書きやすいように先にデータベースを読み込んで閉じるだけのプログラムを実装します。
index.pyの後半で、about.pyで出力したHTML5文書の続きが出力されます。どのようにWebブラウザにHTML5文書が送られたかは、Webブラウザの「ページのソース」などのメニューで確認してみるといいでしょう。
なぜこんなわかりにくい書き方をするかと言うと、後半のHTML5文書は全てのWebページで共通しているため、コード量を減らすためにこのようにしました。こうすることで、書き換える時も管理しやすくなります。
#!C:\Users\ユーザー名\AppData\Local\Programs\Python\Python312\python.exe import sys import io import sqlite3 import pages.about as about #日本語があってもエラーにならないように sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') con = sqlite3.connect('bezierbbs.db') cur = con.cursor() print('Content-Type: text/html; charset=utf-8\n\n') about.html(cur) cur.close() con.close() print(''' <h2>メニュー</h2> <ul> <li><a href="?page=home">HOME</a></li> <li><a href="?page=draw">DRAW(お絵描き)</a></li> <li><a href="?page=about">ABOUT</a></li> </ul> </div> <div id="right"> <canvas width="760" height="500"></canvas> <footer> <h3>このサイトは2025年から<a href="http://vexil.jp" target="_blank">VexilJp</a>がテストしています。</h3> </footer> </div> </body> </html> ''')
サンプルコードの解説
シェバンのところはご自分のユーザー名にしてください。またmacOSやLinuxでは「#!/usr/local/bin/python3.12」などになります。
モジュールを読み込みます。「pages」→「about.py」を「about」モジュールとして読み込みます。
UTF-8で日本語に対応します。
「bezierbbs.db」ファイルを読み込むところは前回と同じでコネクトしてカーソルを取得します。
このHTML5文書がhtml文であることを出力して明示します。
importしたaboutのhtml関数を呼び出します。
データベースを閉じます。
HTML5文書の終わりを出力します。