当然今天讲的验证,不只Tornado会用,以后用到web框架都会用到,最常见的场景就是只有用户登陆了才能执行某些操作,所以在执行这些操作前要先做登陆状态的验证。
比如:点赞,发布,评论等需要验证,都需要用到if self.session【‘is_login’】进行判断,你可能觉得,这代码也不多啊,不过一旦网站大了,场景多了,可以写到你手抽筋,其实我们可以在执行post方法或get方法之前进行登陆状态的验证,用装饰器进行这么一个功能扩充就可以了
decrator.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#处理刷新页面的请求 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表单提交
应用:
1
2
3
4
5
|
class ManagerHandler(BaseRequestHandler): @decrator .auth_login_redirect def get( self ): self .write( 'ok' ) |
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。