GET/POST データの操作 – Python

GET・POST リクエストの判定

os モジュールのenviron[‘REQUEST_METHOD’] を使用します。POST でリクエストされると “POST”、GETでリクエストされると “GET” になります。通常は GET リクエストなので “GET” が入ります。

import os 
if os.environ['REQUEST_METHOD'] == 'POST':
print 'POST REQUEST'

GET・POST データの取得

cgi モジュール

リクエストされたデータを取得するには cgi モジュールの FieldStorage() を使用します。 これは、GET、POST の双方のデータを取得する事が出来ます。

data = cgi.FieldStorage()

値にアクセスするには、辞書の get のような動きの getvalue() メソッドがあります。

getvalue(取得したいキー, キーに値がなかった時のデフォルト値)

で使用することが出来ます。

data.getvalue('name', 'not found') 

POST か GET に値があれば name キーの値、なければnot found が返されます。

同じフィールドに複数の値がある場合

例えば、 GET パラメータに name=kingyo を指定、POST も同時に name=bachi とした場合、getvalue() の戻り値は それらを含んだリストに変わります。

getvalue() だと、単一の場合と複数の場合で、リストになったり文字列になったりするので、常にリストで取得したい場合は getlist(name) を使用します。

data.getlist('id')

getlist() は指定された name のフィールドや値がなければ空のリストを返します。

また、逆に常に文字列で取得したい場合は、getfirst(name, default=None) を使用します。

getfirst('id')

getfirst() は、複数の値があったとしても、一番最初の値だけを返します。なにが最初に来るかの順番は、ブラウザによって変わる可能性があるので、並び順は考慮しない作りにしないといけないようです。
name に指定されたフィールドや値がなければ、default に指定された値が返されます。(初期設定では None が返されます)

辞書風にアクセスする

getvalue() や getfirst(), getlist() 等を使わずに、辞書風でアクセスして値を取得する事も出来ます。

data['name'].value

辞書風アクセスは、.value だけでなく、in 演算子で包含検査、keys() や len() もサポートしているようです。

if 'name' in data:
	# True
else:
	# False

data.keys()  # ['name'] 等

len(data)  # 1

参考

http://www.python-izm.com/contents/cgi/request.shtml
http://docs.python.jp/2/library/cgi.html
http://bygzam.seesaa.net/s/article/110314834.html

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です