Blog

PythonでPOSTメソッドを使いフォームからデータの習得をする

2015.03.14 | Python | 6221views


th_Python-logo-notext.svgまたPythonです。前回CGIモジュールをインポートしてCGIを使ってみましたね。今回はPOSTメソッドを使ったフォームで、データを取得してみましょう。ざっくりとした解説で行きますが、これをそのまま実装するとか言うのはナシにしてくださいね。実際にHTMLとPythonをどう使うかというのがなんとなくでも分かればいいな、と思っています。

とりあえずさっさとHTMLファイルを用意しよう

まずはフォーム画面をさっさと作ってしまいましょう。


<html>
<head>
<title>Form test</title>
</head>

<body>
<h1>Python Form test</h1><hr>

<form name="Form" method="POST" action="/cgi-bin/form.py">
name: <input type="text" size="30" name="name">
mail: <input type="text" size="30" name="mail">
<input type="submit" value="submit" name="button">
</form>
</body>
</html>

ざっくりですねー。HTMLの基礎知識はあるものとして解説していきます。formタグを使用してメソッドはPOST、/cgi-bin配下にあるform.pyにデータを送ることとします。まだform.pyは作ってませんからご注意!

nameという項目に名前を入れさせる、mailという項目にメールアドレスを入れさせると仮定して作ってみました。このファイルはform.htmlという名前をつけて以前作ったpyworksフォルダ直下に配置しましょう。

form.pyファイルを準備する

実際にデータを受け取って、その結果を出力するためのPythonスクリプトを書きましょう。


#!/usr/bin/env python
import cgi

print "Content-Type: text/html\n"

print "<html><body>"

form = cgi.FieldStorage()
form_check = 0
if form.has_key("name") and form.has_key("mail") :
  form_check = 1
if form_check == 0 :
  print "<h1>ERROR !</h1>"
else :
  print "<h2>PRINT</h2><hr>"
  print "<b>name: </b>", form["name"].value
  print "<b>mail: </b>", form["mail"].value

print "</body></html>"

上記をform.pyとして、以前作ったpyworksの中にあるcgi-binフォルダへ保存してください。 chmodで755を与えるのも忘れずに!

ちょっと休憩スクリプトの中身を解説

import でcgiモジュールをインポートします。

form = cgi.FieldStorage()

で、FiledStorageクラスをインスタンス化してます。インスタンス化、と言うのは用語ですので「ああそういう意味か、位で覚えておきましょう。」

インスタンス化とは、オブジェクト指向のプログラミングにおいて、インスタンス(クラスを基にした実際の値としてのデータ)を生成することである。

通常、インスタンスはクラスと対比して使用される。例えば「名前、身長、体重」というクラスがあるとすれば、そのインスタンスは「佐藤、170、60」というよう風にして作られる。一つのクラスから複数のインスタンスを作ることができ、それぞれのインスタンスは違った値を持つことができる。また、プログラムの中で実際に扱われるのはクラスではなく、こうして作られたインスタンスの方である。 プログラミングの現場では、クラスを定義したあとで変数などの実体を用意するが、こうした処理がインスタンス化と呼ばれる。

用語はなんでそうなるのかとか深く考えだすと勉強が滞ります。用語の意味だけ把握しておきましょう。

で、話は戻りますがインスタンス化してフォームの内容を受け取ろう、ということになってるわけですね。送られてきた内容に、期待する値が含まれているかどうかを判断しているのがこの部分。


if form.has_key("name") and form.has_key("mail") :

has_key メソッド というものでで確認しているわけです。値がフォームに存在していればその値を取得し返して表示しているだけ。ということになってます。if というのは「もし〜であれば こう」という命令で、else というのは「上記全部あてはまらなければ こう」という命令だと思ってください。基本的にプログラムは上から順番に実行されていきます。

もっと細かく解説


#!/usr/bin/env python #おまじない
import cgi #cgiモジュールをインポートする

print "Content-Type: text/html\n\n" #htmlファイルを表示するためのおまじないをする

print "<html><body>" #print 以下の文字列""の中身を表示する

form = cgi.FieldStorage() #インスタンス化してる
form_check = 0 #form_check を 0 としている
if form.has_key("name") and form.has_key("mail") : #もし期待する値が name そして mailなら以下のように処理 という命令
  form_check = 1 # form_check は 1だお
if form_check == 0 : #もし form_checkが0だったら以下のように処理しろという命令
  print "<h1>ERROR !</h1>" #print で文字列""の中身を表示
else : #上記 if が全部当てはまらかなったら以下のように処理しろ という命令
  print "<h2>Result</h2><hr>" #print で〜以下略
  print "<b>name: </b>", form["name"].value
  print "<b>mail: </b>", form["mail"].value

print "</body></html>"

ここで覚えておきたいのは form_check というのは名前をプログラムする人が勝手につけて定義している箇所なので、 form_in とか名前を変えても動きます。こういうものを「変数」と呼びます。変数 = オブジェクト になっていると覚えてください。名札がついてるわけです。

form_check = 0 #変数 = オブジェクト

というわけですね。いかがでしょうか無事ついてこれてますか。では実際に動かしてみましょう。

フォームを動かそう

ではいよいよ動かしましょう。前回作ったcgiserver.pyをシェルから起動してください。


$ python cgiserver.py

これで http://127.0.0.1:8000/form.html をブラウザに打ち込んで表示させましょう。無事フォームが出ていますか?実際に入力してsubmitボタンで送信してみましょう。双方に値が入っていない場合はERRORという表示が帰ってくるはずです。動作が理解できたら、form.pyスクリプトの中身を書き換えて違う内容を表示させてみましょう。

このエントリーが役に立ったらシェアしてください


LLC JIRIKI HOME

この記事を書いた人

淵上 喜弘

著者:LLC JIRIKI

合同会社ジリキ 代表社員兼、業務執行社員。
1979年生まれ 兵庫県尼崎市出身・明石市育ち。

川崎医療福祉大学を卒業後、日産サティオ岡山に就職し初年度新人賞をカルロス・ゴーンCEOより受賞。その後NTT関連フレッツ販売会社に再就職し、地域賞2位を受賞。OCN販売表彰2位も同時受賞するとともにBフレッツ単独販売数の記録を打ち立てる。2006年合同会社ジリキ設立。SEO、WEBサイト制作業を開始する。

SEOで「大阪 探偵」や「離婚 行政書士」などのキーワードや「子ども 教材」「スマートフォンケース」など各種キーワードで1位を獲得。サイト制作でも毎日コミュニケーションズ・マイナビ女子オープンのサイトを制作。その後ECサイト運営サポートに着手し、売上月商50万のストアを1年半で1700万の月商に成長させる。

スマートフォンケースなどの商品企画開発も手がけ、楽天ランキングでも1位獲得、家電ジャンルMVPなどECサイトコンサルティングでも実績あり。

現在、グロースハックに注力しており様々な業種のサイトのCVアップをサポート中。チームとしてのグロースハック実績ではKaizenグロースハッカー総合 Top 20%、不動産 Top 10などを頂いています。

プログラミングは本業ではなくあくまでも趣味の一環として取り組んでいます。月1回ペースで東京へ出張へ行っておりますので、機会があれば是非お話をしましょう。

LLC JIRIKI