基本处理程序类,webapp2_extra.auth

时间:2014-03-09 09:15:55

标签: google-app-engine python-2.7 webapp2

为了确保在每个请求中保存所有会话数据,我们只在我们的基本处理程序类中使用dispatch方法,这是一个例子:

class BaseHandler(webapp2.RequestHandler):
  @webapp2.cached_property
  def auth(self):

   return auth.get_auth()

  @webapp2.cached_property
  def user_info(self):
        return self.auth.get_user_by_session()

  @webapp2.cached_property
  def user(self):

     u = self.user_info
     return self.user_model.get_by_id(u['user_id']) if u else None

  @webapp2.cached_property
  def user_model(self):
       return self.auth.store.user_model

  @webapp2.cached_property
  def session(self):

     return self.session_store.get_session(backend="datastore")

  def render_template(self, view_filename, params={}):
    user = self.user_info
    params['user'] = user
    self.response.out.write(template.render(path, params))

 def display_message(self, message):

   params = {
    'message': message
   }
   self.render_template('message.html', params)

 # this is needed for webapp2 sessions to work
 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)

根据本教程http://blog.abahgat.com/2013/01/07/user-authentication-with-webapp2-on-google-app-engine/#comment-4858 实际上我不明白框架如何使用调度方法,我只是声明它我从来没有使用它!是吗?

1 个答案:

答案 0 :(得分:1)

Dispatch调度(您的)webapp2请求处理程序。

除了实现自己的调度算法之外,您还可以在处理程序开始或结束之前和之后执行操作,例如:

  • 在调用处理程序和
  • 之前加载会话数据
  • 在处理程序完成后将数据存储在会话中。

如果您不使用调度覆盖,则必须自己在所有处理程序中加载和存储会话数据。