PythonではじめるCGIプログラミング入門:初めてのCGIスクリプトの作成方法
ここでは、hello.pyという名前のCGIスクリプトへリンクするシンプルな例を紹介します。このファイルは /var/www/cgi-bin ディレクトリに配置されているものとします。CGIプログラムを実行する前に、UNIXコマンドのchmod 755 hello.pyを実行して、ファイルに実行権限を付与しておく必要がある点に注意してください。
サンプルコード
#!/usr/bin/python print "Content-type:text/html\r\n\r\n" print '<html>' print '<head>' print '<title>Hello World - First CGI Program</title>' print '</head>' print '<body>' print '<h2>Hello World! This is my first CGI program</h2>' print '</body>' print '</html>'
※ 上記のコードはPython 2系の記法(print文)で書かれています。Python 3系で実行する場合は、print()関数の形式に書き換えてください。
実行結果
ブラウザからhello.pyにアクセスすると、次のような出力が表示されます。
Hello World! This is my first CGI program
このhello.pyスクリプトはごくシンプルなPythonスクリプトで、出力をSTDOUT(標準出力)に書き出しています。ここで特に重要なのが、最初に出力されるContent-type:text/html\r\n\r\nという行です。この行はブラウザへ送り返され、ブラウザ画面に表示するコンテンツの種類(MIMEタイプ)を指定する役割を果たします。
ここまでで、CGIの基本的な仕組みは理解できたはずです。この知識を応用すれば、Pythonを使ってより複雑なCGIプログラムを作成できるようになります。さらに、RDBMSなどの外部システムと連携して情報をやり取りするプログラムも構築可能です。
HTTPヘッダーとは
Content-type:text/html\r\n\r\nの行は、ブラウザがコンテンツを正しく解釈できるように送信されるHTTPヘッダーの一部です。すべてのHTTPヘッダーは、次の形式で記述されます。
HTTPフィールド名: フィールドの内容
記述例
Content-type: text/html\r\n\r\n
CGIプログラミングで頻繁に使用される、その他の重要なHTTPヘッダーを以下にまとめました。
| No. | ヘッダー名と説明 |
|---|---|
| 1 | Content-type: 返されるファイルの形式を定義するMIME文字列です。例:Content-type:text/html |
| 2 | Expires: Date 情報が無効となる日時を指定します。ブラウザはこの値をもとに、ページをいつ更新すべきかを判断します。有効な日付文字列の形式は「01 Jan 1998 12:00:00 GMT」です。 |
| 3 | Location: URL リクエストされたURLの代わりに返されるURLです。このフィールドを利用すると、任意のファイルやページへのリダイレクトが可能になります。 |
| 4 | Last-modified: Date リソースの最終更新日時を示します。 |
| 5 | Content-length: N 返されるデータの長さをバイト単位で示します。ブラウザはこの値を利用して、ファイルの推定ダウンロード時間を表示します。 |
| 6 | Set-Cookie: String stringで渡された内容に基づいてCookieを設定します。 |
-
Pythonでテキストエリア(TEXTAREA)のデータをCGIプログラムに渡す方法
複数行のテキストデータをCGIプログラムに送信したい場合には、HTMLのTEXTAREA要素を使用します。TEXTAREAは、ユーザーが自由に複数行の文章を入力できる入力欄を提供し、その内容は通常のテキストフィールドと同じようにCGIプログラムへ渡されます。 TEXTAREAを使ったフォームのHTMLコード例 以下は、TEXTAREAボックスを含むフォームのHTMLコード例です。 <form action = "/cgi-bin/textarea.py" method = "post" target = "_blank">
-
Pythonでリストのすべてのサブリストを生成して出力する方法
リストが与えられたとき、そのリストに含まれるすべてのサブリスト(部分リスト)を生成して出力するプログラムを紹介します。要素数 n のリストの場合、空のリストを含めるとサブリストの総数は n×(n+1)/2+1 個になります。 実行例 入力 : list = [1, 2, 3] 出力 : [], [1], [1, 2], [1, 2, 3], [2], [2, 3], [3] アルゴリズム 考え方はシンプルです。開始位置 i と終了位置 j の組み合わせをすべて試し、スライスで部分リストを取り出します。 ステップ1 : 対象となるリストを用意します。 ステップ2 : 結果を格納するため、最