2012-08-05 62 views
3

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

可能吗?

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

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

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

回答

5

记住,谷歌App Engine是一个平台,而不是一个框架, 所以你的问题是,如果webapp2的(GAE中使用的默认框架) 有一个很好的接口来处理饼干。即使框架没有这个接口 ,只要你有权访问Cookie头部 这个请求,你就可以访问cookie。

以下是两个示例,一个使用webapp2 cookie界面,另一个使用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") 
     ... 

请参阅webapp documentation了解更多有关会议和饼干的形成。

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