抽屉之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')

 

应用:

转载于:https://www.cnblogs.com/zcok168/p/9797805.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值