MySQLと対話するPython CGIプログラムの作成方法【サンプルコード付き】
MySQLと対話するPython CGIプログラムの作成方法
PythonのCGIスクリプトを使えば、Webブラウザからの入力を受け取ってMySQLデータベースとやり取りするアプリケーションを簡単に構築できます。ここでは、メールアドレスとパスワードでアカウントにログインするシンプルなログインシステムを例に、実装手順をわかりやすく解説します。
ステップ1:ログインフォーム(login.html)を作成する
まず、ユーザーがメールアドレスとパスワードを入力できるHTMLフォームを用意します。このフォームはGETメソッドでlogin.pyへデータを送信します。
<html>
<body>
<form action="login.py" method="get">
email: <input type="text" name="e1">
password: <input type="password" name="p1">
<input type="submit" value="register">
</form>
</body>
</html>
ステップ2:CGIスクリプト(login.py)を作成する
次に、フォームから送信された値を受け取り、MySQLデータベース内のuserテーブルと照合して認証を行うPythonスクリプトを作成します。認証に成功した場合はCookieを発行し、ログイン成功ページを表示します。
#!C:\Python27\python.exe
import MySQLdb
import cgi
import Cookie
# データベース接続を開く
db = MySQLdb.connect("localhost","root","","student" )
# cursor()メソッドでカーソルオブジェクトを準備
cursor = db.cursor()
data=cgi.FieldStorage()
a=data.getvalue('e1')
b=data.getvalue('p1')
# レコードを取得するSQLクエリを準備
sql = "select id,email,password from user where email='"+a+"' AND password='"+b+"'"
try:
# SQLコマンドを実行
if(cursor.execute(sql)):
# データベースの変更をコミット
db.commit()
c=Cookie.SimpleCookie()
# 値を代入
c['mou']=a
# 有効期限を設定
c['mou']['expires']=24*60*60
# Cookieから始まるヘッダーを出力
print c
print("Content-type: text/html")
print('''<html>
<head>
<title>Hello Word - First CGI Program</title>
</head>
<body>
<h2>successfully login</h2>
</body>
</html>''')
else:
# データベースの変更をコミット
db.commit()
print("Content-type: text/html")
print("<html>")
print("<body>")
print("<h2>fail</h2>")
print("</body>")
print("</html>")
except:
# エラー発生時はロールバック
db.rollback()
# サーバーとの接続を切断
db.close()
コードのポイント
- データベース接続: MySQLdb.connect()でローカルホスト上のstudentデータベースに接続し、cursor()メソッドでカーソルオブジェクトを生成します。
- フォームデータの取得: cgi.FieldStorage()を使って、送信されたメールアドレス(e1)とパスワード(p1)を取得します。
- 認証処理: SELECT文でuserテーブルから、入力されたメールアドレスとパスワードの組み合わせに一致するレコードを検索します。
- Cookieの設定: ログイン成功時にはCookie.SimpleCookie()でユーザーのメールアドレスを保存し、有効期限を24時間(24×60×60秒)に設定します。
- 結果の出力: 認証の成否に応じて「successfully login」または「fail」のHTMLページを返します。例外が発生した場合はrollback()でトランザクションを巻き戻し、接続を閉じます。
注意点
このサンプルはPython 2系の記法(print文など)で書かれているため、Python 3環境で動かす場合はprint関数への書き換えが必要です。また、SQL文を文字列連結で組み立てているため、SQLインジェクションの脆弱性があります。実運用では%sなどのプレースホルダを使ったパラメータ化クエリを採用し、パスワードも平文ではなくハッシュ化して保存することを強くおすすめします。
-
Pythonプログラムの実行方法まとめ!IDLE・コマンドライン・PyCharmなど5つの方法を解説
コードを書いたら、次はそれを実行して出力結果を確認する必要があります。プログラムを実行することで、書いたコードが正しく動作し、期待通りの結果が得られるかどうかをチェックできます。幸いなことに、Pythonプログラムの実行はとても簡単です。この記事では、代表的な5つの実行方法をわかりやすく解説します。IDLEで実行するPythonに標準で付属しているIDLEを使ってプログラムを実行するには、以下の手順に従います。Pythonのコードを書いて保存します。メニューから「Run > Run Module」を選択するか、キーボードのF5キーを押すだけで実行できます。IDLEは初心者にとって扱いやす
-
Pythonでテキストエリア(TEXTAREA)のデータをCGIプログラムに渡す方法
複数行のテキストデータをCGIプログラムに送信したい場合には、HTMLのTEXTAREA要素を使用します。TEXTAREAは、ユーザーが自由に複数行の文章を入力できる入力欄を提供し、その内容は通常のテキストフィールドと同じようにCGIプログラムへ渡されます。 TEXTAREAを使ったフォームのHTMLコード例 以下は、TEXTAREAボックスを含むフォームのHTMLコード例です。 <form action = "/cgi-bin/textarea.py" method = "post" target = "_blank">