こんどはPOSTを受ける方法。

気になったので調べてみた。
POSTの場合はフォームから入力されたものと同じく

import cgi

form = cgi.FieldStorage()
print "Content-Type: text/html\n\n"
print form

ってなカンジで取り出す。


しかし、GETと同じパラメータで渡すと、出力が

FieldStorage(None, None, [MiniFieldStorage('maru', 'nau'), MiniFieldStorage('me', 'meee')]) 

こんななった。
フォーム(POST)としてのデータの渡し方をしないとダメみたい。

ちゃんと渡した場合はhas_keyメソッド使ってkeyあるかどうかしらべて

form['辞書key'].value

とかで取り出せるみたい。


あー書くのメンドクサイ。
あとはpythonのドキュメント見ろオレ。
"cgi.fieldstorage"で検索。

httpリクエストのGETクエリをpythonで受ける。

基本的にPerlとかと一緒。
クエリとしてはURLの後ろなんかに?から始まる'maru=nau&me=mee'みたいな、key=値を&でつなげた情報ね。

import os
import cgi

if 'QUERY_STRING' in os.environ:
    query = cgi.parse_qs(os.environ['QUERY_STRING'])
else:
    query = {}

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

但し、上のqueryオブジェクトには{'辞書key':[リスト], 辞書key:[リスト・・・ってなカンジで戻ってきてるので。取り出すには

query['辞書key'][0]

とか打たないとエラーでます。
参考サイト
Python CGI でqueryを受け取る:新適当マイコン電子工作研究所:So-net blog

apacheでpythonをcgiとして動作させる。

基本的にはapache側の設定として、ScriptAliasの設定がされていて。

(ex)
ScriptAlias /cgi-bin/ "D:/xampp/cgi-bin/"

ディレクトリ設定でCGIの許可が設定されていればOk.

(ex)

AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all

後は、スクリプトファイルの1行目で呪文を唱えるだけ。That's all !

#!C:\Python25\python.exe
#coding=utf-8

import sys
import os
〜以下省略〜

算数orz

先日、ちょっとコンクリ打ちする用事があり。近所のホームセンターでインスタントコンクリを購入することとなったのだが・・・
容積計算ができず、3回/dayホームセンターに買い足しに行く羽目に。


ちょっと算数くらいできるよーになろーねオレ。
まずは換算表
1立方メートル(㎥) = 1,000,000立方センチメートル(m2,cc)
1立方メートル(㎥) = 1,000リットル(ℓ)


で容積計算から
幅(1.5m) x 奥行き(4m) x 高さ(0.1m) = 0.6㎥
0.6㎥ = 600ℓ


コンクリ1袋で20リットルって書いてあったから・・・
600ℓ / 20ℓ = 30袋


やっぱりそうか・・・ぜんぜん足りんわけだ。


ちなみにペットボトル2ℓは・・・
2ℓ = 2000㏄
10㎝ x 10㎝ x 20㎝ ですね^^


なさけなしorz

非同期イベント処理。

非同期イベント(ネットワーク処理orI/Oしょりetc)のpythonでの実装方法。


今回もurllib2でサーバーへGET/POSTリクエストして読み込んだhtmlデータの受信完了のイベントをハンドリングしたかったが、while文とかでテキトー(いや無理やり)チェックかけて乗り切ったorz


  

名前つき変換指示子

htmlなどへパースする際に便利。
でもこれインデント壊れるんだよね。まーしゃーない。

dic = {'name' : 'おいらの名前',
        'birthday' : '2009/4/10',
        'height' : '175cm'
       }

html = """<p>%(name)s</p>
<p>%(birthday)s</p>
<p>%(height)s</p>""" % dic