SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Pythonで学ぶバックエンド開発

【Pythonでデータベースを扱おう】「SQLite3」を使ってWebサイトのアバウトページを作成しよう!

Pythonで学ぶバックエンド開発 第5回

  • X ポスト
  • このエントリーをはてなブックマークに追加

 本連載では、ベジェ曲線でお絵描きするWebアプリを使って、描いた絵を公開できる掲示板を開発しながら、Pythonを使ったバックエンド開発について学んでいきます。連載第5回は、Pythonで「一筆書きBBS」のWebサイトの最初に「アバウトページ」を作る方法を解説します。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 前回は、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スクリプトとして実行することができません。

「.htaccess」ファイル
AddHandler cgi-script .py
DirectoryIndex index.py

about.pyファイルをコーディングする

 後ほどindex.pyファイルから呼び出すために、「pages」→「about.py」ページの「html」関数をコーディングします。まだ引数の「cur」は使っていません。

サンプルコード「pages」→「about.py」ファイル
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ページで共通しているため、コード量を減らすためにこのようにしました。こうすることで、書き換える時も管理しやすくなります。

[1] サンプルコード「index.py」ファイル
#!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文書の終わりを出力します。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます
  • ・翔泳社の本が買える!
    500円分のポイントをプレゼント

メールバックナンバー

次のページ
アバウトページの説明を書く

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Pythonで学ぶバックエンド開発連載記事一覧

もっと読む

この記事の著者

大西 武(オオニシ タケシ)

 1975年香川県生まれ。大阪大学経済学部経営学科中退。プログラミング入門書などを30冊以上商業出版する作家。ドコモでグランプリなどコンテストに20回以上入賞するアーティスト。オリジナルの間違い探し「3Dクイズ」がTVで約10回出題。プロフィールサイト:https://profile.vixar.jp

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

CodeZine編集部(コードジンヘンシュウブ)

CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/21528 2025/09/16 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング