python - tornado中用户管理的问题
PHP中文网
PHP中文网 2017-04-17 14:36:02
[Python讨论组]

用户登陆后,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,感觉太冗余了,求问各路大侠怎么解决!谢谢!

PHP中文网
PHP中文网

认证0级讲师

全部回复(1)
怪我咯
pythonclass 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 }}来获取当前登录用户,得到的就是 BaseHandlerget_current_user 的返回值。

因为 tornado 已经帮我们做好了,因此不需要再在每个 handler 里 render 时带 user 或 current_user 出去了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号