3

Python と Google App Engine について学習するためのアプリケーションを開発しています。一部のコンテンツを非表示または表示するために、Cookie から値を取得し、テンプレートに出力したいと考えています。

出来ますか?

Google App Engine で使用するのに最適なセッション システムはどのようなものですか?

gae とテンプレートでセッションを使用する最良の方法は何でしょうか?

テンプレートを使用して Cookie の値を検証するにはどうすればよいですか?

4

1 に答える 1

5

Google App Engine はフレームワークではなくプラットフォームであることを思い出してください。したがって、質問は、webapp2 (GAE で使用されるデフォルトのフレームワーク) に Cookie を処理するための優れたインターフェースがあるかどうかです。フレームワークにこのインターフェースがない場合でも、リクエストの Cookie ヘッダーにアクセスできる限り、Cookie にアクセスできます。

以下に 2 つの例を示します。1 つは webapp2 Cookie インターフェースを使用し、もう 1 つは Cookie ヘッダーのみを使用しています。

webapp2:

class MyHandler(webapp2.RequestHandler):
    def get(self):
        show_alert = self.request.cookies.get("show_alert")
        ...

Cookie ヘッダー (webapp2 を使用):

# cookies version 1 is not covered
def get_cookies(request):
    cookies = {}
    raw_cookies = request.headers.get("Cookie")
    if raw_cookies:
        for cookie in raw_cookies.split(";"):
            name, value = cookie.split("=")
            for name, value in cookie.split("="):
                cookies[name] = value
    return cookies


class MyHandler(webapp2.RequestHandler):
    def get(self):
        cookies = get_cookies(self.request)
        show_alert = cookies.get("show_alert")
        ...

同じことがセッションにも当てはまりますが、独自のセッション ライブラリを作成するのはより困難ですが、いずれにせよ、webapp2 で説明しました:

from webapp2_extras import sessions

class MyBaseHandler(webapp2.RequestHandler):
    def dispatch(self):
        # get a session store for this request
        self.session_store = sessions.get_store(request=self.request)
        try:
            # dispatch the request
            webapp2.RequestHandler.dispatch(self)
        finally:
            # save all sessions
            self.session_store.save_sessions(self.response)

    @webapp2.cached_property
    def session(self):
        # returns a session using the backend more suitable for your app
        backend = "securecookie" # default
        backend = "datastore" # use app engine's datastore
        backend = "memcache" # use app engine's memcache
        return self.session_store.get_session(backend=backend)

class MyHandler(MyBaseHandler):
    def get(self):
        self.session["foo"] = "bar"
        foo = self.session.get("foo")
        ...

セッションと Cookie の詳細については、 webapp のドキュメントを参照してください。

テンプレートに関する質問については、使用しているテンプレート エンジンのドキュメントを参照して、知っておくべきことを探してください。

于 2012-08-05T13:29:39.857 に答える