はじめに
こんにちは、野村です。
今回は、PythonでCGIを組む方法を紹介します。
これで、Pythonならではのライブラリを使ったプログラムをWebに公開できます。
でも、いまどきCGIを書くこと自体のメリットはあるのかな?
スクリプト
GETやPOSTで送信した値を書き出すスクリプトです。
GETもPOSTも「getvalue」というメソッドで取り出せるようです。
Python2系と3系では書き方が違うので両方掲載しておきます。
拡張子は「.cgi」。サーバにアップしたら属性を755に設定するのを忘れずに。
Python2系の場合
#!/usr/local/bin/python # -*- coding: utf-8 -*- import sys import codecs sys.path.append('/home/xxx/pylib') #モジュールを格納するデレクトリのパス sys.stdout = codecs.getwriter('utf_8')(sys.stdout) print("Content-type: text/html; charset=UTF-8\n") import cgi form = cgi.FieldStorage() htm = '''<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"/> <title>py2.cgi</title> </head> <body> <form method="POST"> <input type="text" name="ptest"/> <input type="submit"/> </form> <div>%s</div> </body> </html> ''' print(htm % form.getvalue('ptest'))
Python3系の場合
#!/usr/local/bin/python3 import sys import io sys.path.append('/home/xxx/pylib') #モジュールを格納するデレクトリのパス sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') print("Content-type: text/html; charset=UTF-8\n") import cgi form = cgi.FieldStorage() htm = '''<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"/> <title>py3.cgi</title> </head> <body> <form method="POST"> <input type="text" name="ptest"/> <input type="submit"/> </form> <div>%s</div> </body> </html> ''' print(htm % form.getvalue('ptest'))
GETとPOSTに両方送信すると
GETもPOSTも同じメソッドから取り出せる。
ならば、同じ名前のパラメータに同時に送信するとどうなるんだろ?
ちょっと実験してみました。
GET側に「GetVal」、POST側に「PostVal」という文字列を設定して送信してみると
['PostVal', 'GetVal']
配列で返ってきた。あ、Pythonだから「リスト」と呼ぶのか。
そして、POSTが優先なのですな。
終わりに
以上、PythonでCGIを書く方法を紹介しました。
ちょっとしたものをWebに公開するにはいいかもしれないです。
というわけで、今回はこれにて。