PythonのCGIプログラミングに必要なモジュールとは?cgiモジュールの基本と使い方
PythonでCGIプログラムを書く際、まず出発点となるのが標準ライブラリの「cgi」モジュールです。このモジュールの主な役割は、HTMLフォームからCGIプログラムへ渡された値を取り出すことです。多くの場合、ユーザーはHTMLフォームを通じてCGIアプリケーションとやり取りします。フォームに実行したい処理の詳細を入力し、その指定内容に基づいてCGIが処理を実行する、というのが基本的な流れです。
HTMLフォームには、テキストボックス、チェックボックス、セレクトボックス(プルダウン)、ラジオボタンなど、さまざまな種類の入力フィールドを複数配置できます。
cgiモジュールの基本的な使い方
Pythonスクリプトでは、まず import cgi から始めます。cgiモジュールの中心的な機能は、呼び出し元のHTMLフォーム内のすべてのフィールドを、辞書(ディクショナリ)のような形式で扱えるようにすることです。取得できるのは厳密にはPythonの辞書ではありませんが、ほぼ同じ感覚で簡単に操作できます。具体的な例を見てみましょう。
サンプルコード
import cgi
form = cgi.FieldStorage() # フォームデータを保持するFieldStorageオブジェクト
# "username" というフィールドが使われているか確認
# 同じフィールドが複数回使われる可能性もある(カンマ区切りで連結)
if 'username' in form:
username = form["username"]
usernames = ""
if type(username) is type([]):
# usernameフィールドが複数指定された場合
for item in username:
if usernames:
# 2つ目以降の項目 -- カンマを挿入
usernames = usernames + "," + item.value
else:
# 最初の項目 -- カンマは不要
usernames = item.value
else:
# usernameフィールドが1つだけの場合
usernames = username.value
# おまけとして、呼び出し元フォームの全フィールドを
# HTMLのリスト形式で作成してみる
field_list = '<ul>\n'
for field in form.keys():
field_list = field_list + '<li>%s</li>\n' % field
field_list = field_list + '</ul>\n'ユーザーにとって有用なページを表示するには、これ以外にも処理が必要ですが、フォーム送信データを正しく受け取って扱えるようになった時点で、まず良い第一歩を踏み出せたと言えます。
注意:新しいPythonバージョンでの扱い
cgiモジュールは長年にわたりCGIスクリプトの定番でしたが、Python 3.11で非推奨(Deprecated)となり、Python 3.13で標準ライブラリから削除されました。新規プロジェクトでは、Flask、Django、WerkzeugなどのWSGI準拠フレームワークの利用が推奨されます。一方、レガシー環境でcgiモジュールを使用する場合は、上記のとおり cgi.FieldStorage() でフォームデータを取得します。なお、古いコードで見かける form.has_key('username') はPython 2系の書き方であり、Python 3では 'username' in form のようにin演算子を使う点に注意してください。
-
Pythonの必須引数とは?関数に必要な引数の基本をわかりやすく解説
Pythonにおける必須引数(Required Arguments)とは 必須引数とは、関数を定義した際に指定された、呼び出し側が必ず渡さなければならない引数のことです。関数を呼び出すときは、定義された引数の数と順序を正しく守って値を渡す必要があります。 例えば、次のような関数を見てみましょう。 def requiredArg(str, num): print(str, num) # 正しい呼び出し方:2つの引数を渡す requiredArg(Hi, 15) # 誤った呼び出し方:引数が1つしかない requiredArg(Hello) このコードを実行すると、以下のような出
-
Pythonの変数スコープ基本ルールとは?LEGBルールをわかりやすく解説
Pythonにおける変数の参照順序(スコープの解決方法)を理解するうえで、最も有名なのが「LEGBルール」です。これは、Mark Lutz氏の名著『Learning Python』の中で紹介されている記憶術で、Pythonが変数を探す順序を4つの頭文字で表したものです。LEGBルールとは?Pythonは変数を参照する際、最も狭いスコープから最も広いスコープへと、以下の順序で名前を探します。L:Local(ローカル)現在実行中の関数内で定義された変数を指します。関数の内部で代入された変数は、その関数のローカルスコープに属します。E:Enclosing(エンクロージング)別の関数を囲む外側の関数(