class BaseHandler(tornado.web.RequestHandler):"""docstring for BaseHandler"""def get_current_user(self): username = self.get_secure_cookie('user') if not username: return None # 这里还可以加一些其他的东西,比如时间戳啊 token 啊之类的校验 user = self.db.query(User).filter_by(username=username).first() return userclass TopicHandler(BaseHandler):def get(self,topic_id): user = self.get_current_user() if not user: return self.write('please login first') return self.render('topic.html')
在其他继承了 BaseHandler 的 class 里,直接使用 user = self.get_current_user() 来获取当前登录用户就好了。
在模板里,直接使用 {
{ current_user }}来获取当前登录用户,得到的就是 BaseHandler 里 get_current_user 的返回值。因为 tornado 已经帮我们做好了,因此不需要再在每个 handler 里 render 时带 user 或 current_user 出去了