为了确保在每个请求中保存所有会话数据,我们只在我们的基本处理程序类中使用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 实际上我不明白框架如何使用调度方法,我只是声明它我从来没有使用它!是吗?
答案 0 :(得分:1)
Dispatch调度(您的)webapp2请求处理程序。
除了实现自己的调度算法之外,您还可以在处理程序开始或结束之前和之后执行操作,例如:
如果您不使用调度覆盖,则必须自己在所有处理程序中加载和存储会话数据。