PythonCGI – 基本

概要

PythonのコードでCGI(Common Gateway Interface)によってHTMLをする方法の基本。

基本の枠組み

コード例

例えば以下の内容をindex.pyとして準備。

  1. SheBangでPythonの場所を指定
  2. Content-Typeを出力して1行空ける
  3. 出力内容を記述

HTTPのヘッダーで最低限Content-Typeを出力し、ボディーとの間に空行が1行必要。これがないと、500エラーとなり、ログには以下の様に記録される。

コードのモード確認

ファイルがrootの実行権限を持っていること。実行権限がない場合はchmod 755chmod +xで設定する。

コードの配置

cgi実行用のディレクトリーにファイルを配置。Apacheの場合例えば/var/www/cgi-binなど。

ブラウザ表示

URLで[ホスト]/cgi-bin/index.pyを指定すると、ブラウザーにPython CGI Testと表示される。

HTML出力例

ASCII出力

基本の枠組みの出力に、以下の様にタグを加えると要素として表示される。

UTF-8出力

上のコードの一部を日本語にしてみる。

ところがこれをブラウザーで確認すると、h1要素は表示されるがp要素が全く表示されない。ソースを確認してもh1要素の行が表示されるだけ(このコードをコンソールで実行すると、h1要素の行もp要素の行も表示される)。

これを解決するには、ソースコードでio.TextIOWrapperを実行するとよいらしい。

上記の2行を追加すると、無事日本語まで表示された。

HTML出力

コンテンツを以下の様にHTMLの構造にして出力する。title要素も機能して、タブの表示が変更された。

ループの利用例

以下のコードでは、見栄えは良くないがforループでli要素を生成している。

出力に以下が加わる。

  1. 1番目のli要素
  2. 2番目のli要素
  3. 3番目のli要素
  4. 4番目のli要素
  5. 5番目のli要素

Apacheの設定

今回は/etc/httpd/conf/httpd.confのデフォルトのままでcgi-scriptの設定を加えていないが、そのままで適切に実行された。