SHOEISHA iD

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

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

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

【PythonとSQLiteで学ぶ「データの書き込み方法」】Web掲示板にコメント機能を実装しよう!

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

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

はじめに

 今回は、記事で描かれた絵に対するコメントを書き込んだり、表示したりする機能を実装します。いよいよデータベースにデータを挿入(INSERT INTO)するSQL文を使います。

 前回に引き続き「css/mobile.css」「css/pc.css」「js/main.js」「pages/about.py」「pages/etc.py」「pages/home.py」「.htaccess」「bezierbbs.db」「index.py」の各ファイルが存在することを前提に話を進めます。今回も、これらのファイルにコードを追記してプログラミングしていきます。

コメントページを用意する

 まずはテンプレートのみのコメントページを作成します。これまでと違い、ランダムに記事の絵を表示するのではなく、選択した記事の絵だけを表示するページです。まずは次の図のように、絵が表示されていない空のページを作成します。

テンプレートだけのコメントページ
テンプレートだけのコメントページ

「pages」→「comment.py」ファイルをコーディングする

 それでは、コメントページ(pages/comment.py)を次のサンプルコードのようにコーディングします。print文の末尾にある.format(title,xy,title,speaker,date,sentence)によって、出力するHTML内の波括弧{}へ左から順番に各変数の値が渡されます。

サンプルコード「pages」→「comment.py」ファイル
def html(form,con,cur):
  title = "タイトル"
  xy = ""
  speaker = ""
  date = ""
  sentence = ""

  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>

<script>loadPos("{}");</script>

<div id="left">
  <header>
    <h1>{}</h1>
    <nav>
      <a href="?page=home">HOME</a>
      <a href="?page=draw">DRAW</a>
      <a href="?page=about">ABOUT</a>
    </nav>
  </header>
  <ul>
    <li>{}<br />{}<br />{}</li>
  </ul>
  <h2>コメント</h2>
'''.format(title,xy,title,speaker,date,sentence))

「index.py」ファイルをコーディングする

 次のサンプルコードのようにindex.pyファイルをコーディングしたら、XAMPPのローカルサーバを起動して、Webブラウザでindex.pyを実行します。macOSやLinuxの場合は、index.pyに実行権限のパーミッションを与える必要があります。

 index.pyの後半(サンプルコードの(中略)以降のprint文)で、comment.pyが出力したHTML5文書の続きが出力されます。実際にWebブラウザにどのようなHTML5文書が送られたかは、Webブラウザの「ページのソース」などのメニューで確認できます。

サンプルコード「index.py」ファイル
#!C:\Users\ユーザー名\AppData\Local\Programs\Python\Python312\python.exe

import cgi
import sys
import io
import sqlite3
import pages.comment as comment
import pages.about as about
import pages.home as home

#日本語があってもエラーにならないように
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

form = cgi.FieldStorage()
page = form.getfirst('page', '')

con = sqlite3.connect('bezierbbs.db')
cur = con.cursor()

print('Content-Type: text/html; charset=utf-8\n\n')

if page == 'comment':
  comment.html(form,con,cur)
elif page == 'about':
  about.html(cur)
else:
  home.html(form,cur)

cur.close()
con.close()

print('''
(中略)
''')

サンプルコードの解説

 シェバン (#!C:\...の部分)はご自分のユーザー名にしてください。またmacOSやLinuxでは「#!/usr/local/bin/python3.12」などになります。

 「pages」→「comment.py」を「comment」モジュールとして(as)読み込みます。

 UTF-8で日本語に対応します。

 「FieldStorage」関数と「getfirst」メソッドで「GET」した「page」パラメータを取得します。

 「bezierbbs.db」ファイルを読み込むところは前回と同じでコネクトしてカーソルを取得します。

  これから送信するデータがHTML文書であることを(Webブラウザに)明示します。

 GETしたURLのpageパラメータ次第でimportしたcommentモジュールや「about」モジュールや「home」モジュールの「html」関数を呼び出します。

 データベースを閉じます。

 HTML5文書の残りを出力します。

コラム「スモールステップ」

 プログラミングを仕事にしていると気分が落ち込む人が多いと聞きます。落ち込んだ時はスモールステップ、つまり一歩ずつ積み重ねることが大切です。最低限できること、たとえば1行でもコードを書いて、「今日何もできなかった…」と考えるより「少しでも前進して自分は偉い!」と自己肯定するといいかもしれません。

次のページ
コメントページに記事で描かれた絵を用意する

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

Pythonで学ぶバックエンド開発連載記事一覧

もっと読む

この記事の著者

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

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

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

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

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

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/22090 2025/11/20 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング