pythonのcgi moduleのめも

社内でpython製のものをデモするために簡単なcgiを作ろうとしたら、意外と引っかかったのでメモ。

cgi.FieldStorage() → 辞書型

postやgetを受けるcgi.FieldStorage()は、辞書型のようで辞書型でなく、バグの温床になりそうなので変換して使う。

import cgi
form = cgi.FieldStorage()
form_dict={}
for key in form.keys():
    form_dict[key] = form.getvalue(key)

cgi.FieldStorage() のエンコード指定

cgi.FieldStorage(encording='utf-8')

webは何があるか分からないのでencodeを指定する

<input type=“checkbox”>の判定

チェックが入るとcgi.FieldStorage()["key"].valueにstring型で'on'と入る。チェックがないときはcgi.FieldStorage()にキー自体が無い。
ただ、仮に'off'とかが入ってくると怖いので、strの'on'に等しいかで判定する。

tmpフォルダ

matlabplot.pyplotなどで一時ファイルを使うとき、cgi-bin直下にtmpフォルダを作ると権限の関係でうまく動かない。tmpフォルダはcgi-binと同階層に置くこと。
後、一時ファイルを作成した後は、使う前にos.chmod等で権限を付与することも忘れない。