Blog

Pythonで作るもっとも簡単なフォームの受け渡し

2016.06.15 | Python | 857views


Pythonを触り始めるとアプリケーションが作りたくなりますよね。何を作ろうかなぁ、と思った時やはり簡単なのはフォームを受け取り、それを処理するスクリプトです。基本ですが、たったこれだけでかなり色々なWEBアプリケーションが作れるようになります。今回はレンタルサーバーでCGIとして動くスクリプトを説明していきます。

ディレクトリ構造

今後PythonでWEBアプリケーションを色々作りたい、という場合はテンプレートを自作しておくと良いでしょう。Macであればターミナルから移動しやすいところにプロジェクトフォルダを作っておくとローカル環境でテストする際に迷いなく出来るはずです。

スクリーンショット 2016-06-15 15.54.38

上記のような構造にしておくと楽です。ローカルでCGIサーバーを起動させるスクリプトを入れておけばOK。

CGIを動かすスクリプト

#!/usr/bin/python2.7
# -*- coding: utf-8 -*-
import CGIHTTPServer

CGIHTTPServer.CGIHTTPRequestHandler.cgi_directories = ['/htbin', '/cgi-bin/dir1']
CGIHTTPServer.test()

cgiserver.pyの中身はたったこれだけ。

ディレクトリ名が 「test」の場合は、

$cd test
$python cgiserver.py

ターミナルから上記を打ち込むだけです。非常に楽ですね。あとはlocalhostにアクセスするだけでスクリプトの動作を確認できます。スクリプト本体は開発時は.pyで、サーバーに上げた段階で.cgiに変更しましょう。ローカルでは chmod 755 を与えておくことを忘れずに。

フォームの説明

<form method="POST" action="cgi-bin/index.py">
<p><input type="radio" value="part_a" name="choise_pattern">パターンA</p>
<p><input type="radio" value="part_b" name="choise_pattern">パターンB</p>
<p><input type="radio" value="part_c" name="choise_pattern">パターンC</p>
</form>

例えばこのようなフォームがあるとしましょう(submitボタンは省略しました)。

name="choise_pattern"

同一のnameなので、3つのうちどれかしか選択できないフォーム radioボタンのフォームとなります。valueにはPythonで受け取るvalueを設定しますが、ここでは英数字を使用します。Python2.x系は日本語の扱いにクセがあるので・・・。とはいえレンタルサーバーではPython3系使えるところも少ないので、なるべく変なちょぼミスをしないようにという意味合いです。

続いてPython側はこうなります。

import cgi

form = cgi.FieldStorage()
choose_pattern = form["choise_pattern"].value

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

print """
<!DOCTYPE html>
<html lang="ja">
<head></head>
<body>
"""

if choose_pattern == "part_a":
    print "<p>", u"パターンAが選択されました", "</p>

elif choose_pattern == "part_b":
    print "<p>", u"パターンBが選択されました", "</p>

elif choose_pattern == "part_c":
    print "<p>", u"パターンCが選択されました", "</p>

print """
</body>
</html>
form = cgi.FieldStorage()

この箇所でフォームから送られたvalueをとるんだぞー、という記述です。専門用語を使うとわけが分からなくなると思うので、フォームを使うときに必ず書く一行と思っておけばいいでしょう。

choose_pattern = form["choise_pattern"].value

何となく分かるでしょうか? HTMLで書かれたフォームの name=’choise_pattern’ のvalueを choose_pattern という変数に入れ込みます。

あとは実際に変数に入っているvalueの値がどのパターンの場合どうしろ、という記述が続いています。

応用

この例の場合はただ単に受け取ったパターンごとにテキストを表示するだけですが、画像を用意しておいて画像を表示したり、テキストを用意しておいて書き出したり色々なことができます。フォームから受け取る情報はテキストで受け取らないので、それなりに安全とも言えるでしょう。

今回のスクリプトの応用で作ったものがこちら。

http://app.jiriki.co.jp/lp-creater/

選択されたデザインを反映させてLPサイトを書き出すツールです。一部ややこしいことも中ではやっているのですが、Pythonのフォームが書ければ直ぐに作れます。実際このツールも1日で完成してますしね。

まずはともかく、動くものを書いていこう。という精神が大事です。

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


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