PythonでWebプログラミングの基礎(その7)CGIでパラメータを保存する

PythonでWebプログラミングの基礎を学習するというテーマで書いています。前回の続きです。前回はCGIでパラメータを取得するプログラムを書きました。今回はこのパラメータの情報をファイルへ保存します。

処理の流れとしてはユーザ登録処理のような流れです。但し実際に使えるようなレベルではなく「Pythonでのプログラミングの学習や練習」のレベルです。それでも画面からパラメータを入力として取得してファイルへ保存(出力)するという入出力処理の基本的な処理を行います。この「入出力」の流れをぜひ見てください。

処理の流れ
ユーザ登録のような画面が表示されます。

ここで何でもいいので登録情報を入力します。特に未入力や内容のチェックはしていないのでそれらしいデータを入力します。

正常終了すれば以下のような画面が表示されます。

コマンドラインからcatコマンドでファイルの内容を確認します。

もう一件追加すると以下のように順番に追加されていきます。

ファイル構成と起動方法
以下のようなファイル構成です。

Webサーバディレクトリ:webserver
入力画面:index.html
スタイルシート:style.css
保存ファイル:member.txt
保存プログラム:cgi-bin/save.py

Webサーバディレクトリ配下で以下のようにWebサーバを起動します。
$ python3 -m http.server –cgi

ブラウザから以下のURLで入力画面が表示されます。
http://localhost:8000/

以下から入出力の順番で詳細を書きます。

入力画面
入力ファイルとなるHTMLページで、ファイ名がindex.htmlです。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset=utf-8 />
<title>CGIデータ登録</title>
<link rel="stylesheet" href="./style.css">
</head>
<body>
<header class="header">
   <p>CGIでデータ登録(POST Method)</p>
</header>

<div class="content">
以下の項目を入力して登録ボタンをクリックして下さい。
<form name="cgiprm"
      method="post"
      action="cgi-bin/save.py"
      accept-charset="UTF-8">

      <table>
      <tr><td>お名前:</td><td><input name="username" type="text"></td></tr>
      <tr><td>ログイン名:</td><td><input name="handlename" type="text"></td></tr>
      <tr><td>パスワード:</td><td><input name="passwd" type="password"></td></tr>
      <tr><td>メールアドレス:</td><td><input name="mail" type="text"></td></tr>
      <tr><td></td><td><input type="submit" value="登録"></td></tr>
      </table>
</form>
</div>
</body>
</html>

普通のHTMLファイルですが、Formタグ内でTableタグで入力項目のテキストを表示しています。このFormタグでCGIプログラムのsave.pyにPOSTしています。各項目がこのPOSTリクエストのパラメータになります。

CGIプログラム
入力画面からPOSTされたパラメータを受け取ってファイルへ保存します。以下のプログラムです。

#!/usr/bin/env python3

htmlText = '''Content-type: text/html; charset=UTF-8

<html>
<head>
  <title>CGIパラメータの取得</title>
  <link rel="stylesheet" href="../style.css">
</head>
<body>
<header class="header">
   <p>取得したパラメータ</p>
</header>
<div class="content">
<p>%sさん、よろしくお願いします。</p>
</div>
</body>
</html>
'''

import cgi

form = cgi.FieldStorage()

name = form.getvalue('username','')
loginname = form.getvalue('handlename','')
password = form.getvalue('passwd','')
email = form.getvalue('mail','')

line = '%s,%s,%s,%s\n'

file = open('member.txt','a')
file.write(line % (name,loginname,password,email))
file.close()

print(htmlText % name)

以下のような処理で構成されています。

POSTされたパラメータの各項目を取得する
各項目を1行のカンマ区切り文字列にする
1行になったデータをファイルへ追加書きする
処理結果を表示する

これで処理が正常に修正すればmember.txtへ各項目が保存されます。

出力ファイルの確認
ここではコマンドラインに戻ってコマンドかエディタでmember.txtの内容を確認します。

普通は画面(ブラウザ)から一覧表示が出来たり、自分の登録したデータを確認出来ますが、ここはまずはファイルに保存する処理までということで実際のファイルを見て結果を確認します。

入力チェックや登録内容の確認
ここまでで最低限の登録処理は出来たとします。但し、一般的なユーザ登録、ユーザ管理の処理としてはいろいろな処理が不足しています。例えば以下の内容です。

入力チェック処理
エラー処理
パスワードをそのまま保存している
自分が登録した内容の確認

出来ればこれらを課題にして続きを書いていきたいと思います。

2020/04/05 追記
続きとして以下を書きました。今回のプログラムで保存した内容をCGIプログラムで画面に表示します。
PythonでWebプログラミングの基礎(その8)CGIでファイルの内容を表示する