为了账号安全,请及时绑定邮箱和手机立即绑定

tornado中用户管理的问题

tornado中用户管理的问题

心有法竹 2018-10-18 20:24:14
用户登陆后,get_secure_cookie()只存储了用户名,然而在多个页面中会使用用户其他信息,目前的处理方法是:在BaseHandler中返回user:class BaseHandler(tornado.web.RequestHandler):     """docstring for BaseHandler"""     def get_current_user(self):         return self.get_secure_cookie('user')             @property     def user(self):         user = self.db.query(User).filter_by(username=self.current_user).one()         self.db.add(user)         self.db.commit()                 return user然后各个Handler中也返回user = self.user,感觉太冗余了,求问各路大侠怎么解决!谢谢!
查看完整描述

1 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

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 user


class 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 出去了。


查看完整回答
反对 回复 2018-10-28
  • 1 回答
  • 0 关注
  • 1249 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信