#cgiモジュールを使ってwebアプリを理解する
ページ間で値を渡す処理をpython上でどう書けばいいか不明だったため、cgiモジュールのpythonリファレンスを見ていたら、下記の記述があった。
入力されたフォームデータを取得するには、 FieldStorage クラスを使います。
http://docs.python.jp/3.5/library/cgi.html
上記のURLのサンプルコードも使おうとしたのですが、使い方がわからない。
リファレンスは初心者にはわかりづらいと思う。
というわけで、値の受け渡し方法を調べていたら、pythonのコードとhtmlを組み合わせて書いていた人が多かった。考えてみればわかることでしたね笑
##フォルダ構成
├── cgi-bin
│ └── cgiValueTest.py
└── cgiserver.py
└── index.html
<!DOCTYPE html>
<html>
<head>
<title>cgiValueTest.py</title>
</head>
<body>
<form action="/cgi-bin/cgiValueTest.py" method="POST">
<input type="text" name="text" value="diag" />
<input type="submit" name="submit" />
</form>
</body>
</html>
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import cgi
html_body = """
<!DOCTYPE html>
<html>
<head>
<title>受信したデータを表示</title>
<style>
h1 {
font-size: 3em;
}
</style>
</head>
<body>
<h1>%s</h1>
</body>
</html>
"""
form = cgi.FieldStorage()
text = form.getvalue('text','')
print(html_body % (text))
cgiサーバーの動かし方とcgiserver.pyに関しては下記の記事をご覧ください。
Python3上でcgiを動かしてみる
http://qiita.com/shuichi0712/items/5ddc5b4e30c2373b17fb
という感じになりました。
ローカルプロキシでどんな通信結果になっているかというと・・・
リクエスト
つまり、cgi.FieldStorage()は値の受け取り側で書く。
ちなみに、FieldStorage()関数はリクエストの内容(ここでいうtext=diagやsubmit=%91%97OM)をPythonの文字列などに変換します。変換されたデータを使って、処理を行います。その結果としてレスポンスでdiagが表示されるんですね。
##まとめ
頭だけで考えるより、実際に動かして見たほうが理解が速い。特に初心者はまずはやってみて、あとからどういうことかを理解していくのが王道ではないかと。