Tag Archives: Cgi

PythonでCGIを学ぶ

python_logo

CGIはPerlとかPHPが多いイメージだけど、そこをあえてPythonで覚えてみたい!ヾ(・ω・)ノ
そこで下記サイトを参考にさせてもらいながら、基本的なことをまとめてみる。
Python CGIプログラミング入門
Python 2.7ja1 documentation20.2. cgi — CGI (ゲートウェイインタフェース規格) のサポート

500エラーとか出る人は前回の記事 サーバーでPythonを使うときに注意すること をチェック
してみてください(・ω・)b

HTMLとして表示するときは print で最初にヘッダーを書きだして1行開けるのがお約束。

print "Content-Type: text/html"     # 以降のデータが HTML であることを示す行
print                               # ヘッダ部の終了を示す空行

Pythonの中にHTMLコードを書くときは printステートメントをつける。

## こう書いても良いけど…
print "<TITLE>CGI script output</TITLE>"
print "<H1>This is my first CGI script</H1>"
print "Hello, world!"

## 僕はこう書く方が楽で好き
print """
<TITLE>CGI script output</TITLE>
<H1>This is my first CGI script</H1>
Hello, world!
"""

cgiモジュールをインポートする前に、デバッグ用のおまじないを書いておこう。
エラーが発生した際にブラウザ上に詳細なレポートを出力してくれるぞー。

import cgitb
cgitb.enable()

入力されたフォームデータを取得するには、 FieldStorage クラスを使うのがBEST!(゚∇^d) グッ!!
値を取得するには FieldStorage クラスの getfirst メソッドを使う。

import cgi
fs = cgi.FieldStrage()
txt = fs.getfirst('text', '')

print """
    <article>
        <h2>テキストフィールドに入力された文字を表示</h2>
        <p>入力された文字は、<strong>%s</strong> です。</p>
        <form action="cgi_fieldstorage_txtfld.cgi" method="post">
          <input type="text" name="text" />
          <input type="submit" />
        </form>
    </article>
""" % cgi.escape(txt) ## 特殊文字がある場合はHTML上で表示できるようにする

上記のコードのDEMO

サーバーでPythonを使うときに注意すること

python_logo

ちょっとしたことだけど、初めて使うときには躓くよね(´・ω・`)

・拡張子を.pyから.cgiに変更
・パーミッションを755に設定
・改行コードをWindowsのCR+LFからLinuxのLFに変更
・ヘッダでcharsetを指定しない

調べてみると同様の問題についてRubyでの対処法が書いてあったので、
もしかしたらPythonも同じかなぁと思って試したら大丈夫だった(・ω・)b

ちなみにモジュールファイルは.pyで問題なく利用できます。
その際はファイルのパーミッションを600に設定するなどで、
ソースコードが外部から閲覧できないように設定して下さい。

test.cgi

#!/usr/local/bin/python
# -*- coding: utf-8 -*-
 
print "Content-Type: text/html\n"
print
print "Hello world!"