如何在谷歌应用引擎模板上获取cookie值

che*_*263 3 python cookies google-app-engine

我正在开发一个应用程序来学习python和Google App Engine.我想从cookie中获取值并在模板上打印以隐藏或显示某些内容.

可能吗?

什么样的会话系统最适合与谷歌应用程序引擎一起使用?

什么是在gae和模板上使用会话的最佳方式?

如何使用模板验证cookie的价值?

Anl*_*ler 5

请记住,Google App Engine是一个平台,而不是一个框架,所以你的问题是,如果webapp2(GAE中使用的默认框架)有一个很好的界面来处理cookie.即使框架没有此接口,只要您有权访问请求的Cookie标头,您就可以访问Cookie.

这里有两个例子,一个使用webapp2 cookies接口,另一个只使用Cookie头.

webapp2的:

class MyHandler(webapp2.RequestHandler):
    def get(self):
        show_alert = self.request.cookies.get("show_alert")
        ...
Run Code Online (Sandbox Code Playgroud)

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")
        ...
Run Code Online (Sandbox Code Playgroud)

对于会话也是如此,尽管创建自己的会话库比较困难,但无论如何,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")
        ...
Run Code Online (Sandbox Code Playgroud)

有关会话和cookie的更多信息,请参阅webapp文档.

关于模板的问题,您应该再次查看您使用的模板引擎的文档,并查找您需要了解的内容.