2009年6月28日日曜日

GAEでphpのprint_rみたいな出力

phpではprint_rで配列や連想配列の中身を確認することが多いのですが、
pythonではそれに相当するものがなくデバッグに苦労しがちです。
そんなときには、配列や連想配列をjson形式で出力することで、同等に近い表示を行うことができます。


from google.appengine.ext import webapp
from django.utils import simplejson

def print_r(obj):
return simplejson.dumps( obj,indent=4,ensure_ascii=False)

class MainHandler(webapp.RequestHandler):

def get(self):
obj = {
"name" : "sample name",
"desc" : "sample desc",
"option" : {
"val1" : "value1",
"val2" : "value2",
"val3" : 333,
},
"arrary" : [
1,2,3,4,5
],
}

self.response.out.write( '<pre>' + print_r(obj) + '</pre>' )



jsonへ変換するときに、indentを設定してあげて見やすくするのと、
unicode文字列をasciiへエスケープする設定をoffにしています。
出力結果はこんな感じです。


{
"arrary": [
1,
2,
3,
4,
5
],
"name": "sample name",
"option": {
"val3": 333,
"val2": "value2",
"val1": "value1"
},
"desc": "sample desc"
}

2009年6月21日日曜日

Google App Engine でセッションを扱う方法

gaeutilitiesというプロジェクトで実現しています。

http://gaeutilities.appspot.com/

使い方はこんな感じ


#初期化
from appengine_utilities.sessions import Session
self.session = Session()

#セッションへ格納
session['key1'] = 'value1'

#セッションに格納されているか確認
if 'key2' in session:
#セッションの値を出力
print session['key2']


セッションの有効期間や
トークンをクッキーに保存するときの名称、
IPによるセッションの有効チェックなどを
初期化時に設定できるようです。


ざっとソースコードを眺めた感じ、cookie+storage+memcacheで実装されているようです。
同じようなコードを書いてしまいがちですが、車輪の再発明は避けたいですね。

2009年6月16日火曜日

URLFetchでPostする方法

urlfetchに引数を指定することでPostを投げる事もできます。
パラメータはpayloadに指定します。
urllib.urlencodeで文字列を生成することができます。



from google.appengine.api import urlfetch
import urllib

url = u'http://example.com/'
payload = urllib.urlencode( {
'param1' : 'value1',
'param2' : 'value2',
} )
response = urlfetch.fetch( url , payload , urlfetch.POST )