27
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Python3.5のcgiモジュールを使ってページ間で値を受け渡す

Last updated at Posted at 2016-10-31

#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

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>
cgiValueTest.py
#!/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

実行してみると
cgiValueTest01.png

cgiValueTestresult.png

という感じになりました。
ローカルプロキシでどんな通信結果になっているかというと・・・
リクエスト
localpost.png

レスポンス
res01.png

つまり、cgi.FieldStorage()は値の受け取り側で書く。
ちなみに、FieldStorage()関数はリクエストの内容(ここでいうtext=diagやsubmit=%91%97OM)をPythonの文字列などに変換します。変換されたデータを使って、処理を行います。その結果としてレスポンスでdiagが表示されるんですね。

##まとめ
頭だけで考えるより、実際に動かして見たほうが理解が速い。特に初心者はまずはやってみて、あとからどういうことかを理解していくのが王道ではないかと。

####参考サイト
https://yxshipg.appspot.com/python/python3_cgi/

27
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?