zoukankan      html  css  js  c++  java
  • 抽屉之Tornado实战(9)--装饰器实现用户登录状态验证

      当然今天讲的验证,不只Tornado会用,以后用到web框架都会用到,最常见的场景就是只有用户登陆了才能执行某些操作,所以在执行这些操作前要先做登陆状态的验证。

      比如:点赞,发布,评论等需要验证,都需要用到if self.session【‘is_login’】进行判断,你可能觉得,这代码也不多啊,不过一旦网站大了,场景多了,可以写到你手抽筋,其实我们可以在执行post方法或get方法之前进行登陆状态的验证,用装饰器进行这么一个功能扩充就可以了

    decrator.py

    #处理刷新页面的请求
    def auth_login_redirect(func):
    
        def inner(self,*args,**kwargs):
            if not self.session['is_login']:
                #没登录,就让跳到登陆页面
                self.redirect(config.LOGIN_URL)
                return
            #执行post方法或get方法
            func(self,*args,**kwargs)
        return inner
    
    
    #处理ajax请求,往往需要返回一段json字符串
    def auth_login_json(func):
    
        def inner(self,*args,**kwargs):
            if not self.session['is_login']:
                #当is_login为False时,没登录
                rep = BaseResponse()
                #前端根据这个信息,来确定是否弹出登录注册框
                rep.summary = 'auth failed'
                self.write(json.dumps(rep.__dict__))
                return
            #执行post方法或get方法
            func(self,*args,**kwargs)
        return inner
    

       对于auth_login_redirect方法,只要针对刷新页面的请求,因为有些网站登录注册是一个页面(比如京东),而且跳转页面链接定义在配置文件config里,以便修改(LOGIN_URL=‘/login’)

      对auth_login_json方法针对偷偷发请求的,比如抽屉的登陆注册是以弹出框的形式

      后台对ajax请求是不能做跳转处理的,即self.redirect对于ajax是无效的,只能前端js调用location.href,而self.redirect只普通请求(刷新页面)才有效,比如form表单提交

    应用:

    class ManagerHandler(BaseRequestHandler):
    
        @decrator.auth_login_redirect
        def get(self):
            self.write('ok')
    

      

  • 相关阅读:
    测试用例编写(功能测试框架)
    OKR与KPI管理的区别与联系
    手机测试常见的BUG解析
    软件测试之BUG分析定位概述(QA如何分析定位BUG)【转自 https://blog.csdn.net/kaka1121/article/details/51538979】
    KPI、KPA、OKR三者的区别
    swagger api 文档框架
    Jmeter + Ant + Jenkins 接口/性能测试,持续集成环境搭建
    重建词汇精神家园
    记忆的本质
    attention机制七搞八搞
  • 原文地址:https://www.cnblogs.com/xinsiwei18/p/5896322.html
Copyright © 2011-2022 走看看