・文字コード
携帯用サイトの構築を行う場合にはWebアプリケーション内部ではUTF-8を使用し、出力の際にはShift_JISを使用できるようにUTF-8とShift_JISを相互変換する処理を実装する必要があります。
・キャリアに応じたXHTMLの出力
キャリアの仕様
・セッション管理
セッション管理は、ユーザーからのリクエストごとに一意のID(セッションID)を発行し、常にそのIDをリクエストに含ませることで行います。 PCであればクッキーを使用してセッションIDをブラウザに保持しておくことができますが、前述したとおり携帯ではクッキーを使用できる端末が限られるた め、画面遷移時にセッションIDを直接リクエストのパラメータとして渡す必要があります。
パラメータを引き継ぐ必要のある遷移のパターンは以下の3つです。
- リンクによる遷移
- フォームによる遷移
- リダイレクトによる遷移
○PythonでUser Agentの値を取得する
http://d.hatena.ne.jp/perezvon/20080919/1221844404
logging.info(dir(self.request))でuser_agentというプロパティ
self.request.user_agentを使う
○User Agentの値を表示するPythonサンプル
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
class Receiver(webapp.RequestHandler):
def get(self):
self.response.out.write(
"""
<html>
<body>
<b>%s</b>
</body>
</html>
""" % self.request.user_agent)
application = webapp.WSGIApplication([
("/", Receiver)
], debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
○Google App Engine for Pythonでのセッション管理の実装
セッション管理部分のみ抜粋
def getSession(request):
sid = request.cookies.get('SID', '')
if sid:
session = memcache.get(sid)
if session:
return session
else:
session = Session.get(sid)
if session:
memcache_key = str(session.key())
memcache_value = {
'user' : {
'key' : str(session.user.key()),
'name' : session.user.name,
},
}
memcache.add(key=memcache_key, value=memcache_value, time=3600)
return session
○Google App EngineでDjangoのテンプレートエンジンを使う
import wsgiref.handlers
from google.appengine.ext import webapp
#テンプレートを使用するため、下記二つのimportを追加
import os
from google.appengine.ext.webapp import template
class MainHandler(webapp.RequestHandler):
def get(self):
#テンプレートに渡す果物リスト
fruits = ('みかん','りんご','バナナ','パイナップル','スイカ')
#テンプレートに渡す文字列
j_str = '日本語文字列';
#連想配列にテンプレートに渡す値を設定
#テンプレートからは、連想配列のキーでアクセスする。
template_values = {'list' : fruits,
'str_value' : j_str}
#使用するテンプレートを指定
path = os.path.join(os.path.dirname(__file__), 'template/index.html')
#レンダリングを実行し、結果をレスポンスとしてブラウザに返却
self.response.out.write(template.render(path, template_values))
def main():
application = webapp.WSGIApplication([('/', MainHandler)],
debug=True)
wsgiref.handlers.CGIHandler().run(application)
if __name__ == '__main__':
main()
アプリケーションの構成はapp.yamlと同階層フォルダにtemplateを作って、その下にindex.htmlテンプレートファイルを作る
template/index.html
app.yaml
index.yaml
main.py
0 件のコメント:
コメントを投稿