当然今天讲的验证,不只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')

  


如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。

转载于:https://www.cnblogs.com/ExMan/p/10316649.html

抽屉之Tornado实战(9)--装饰器实现用户登录状态验证相关推荐

  1. Spring MVC拦截器实现用户登录权限验证案例

    本节将通过拦截器来完成一个用户登录权限验证的 Web 应用 springMVCDemo07,具体要求如下:只有成功登录的用户才能访问系统的主页面main.jsp,如果没有成功登录而直接访问主页面,则拦 ...

  2. java springmvc权限校验_springmvc拦截器实现用户登录权限验证

    实现用户登录权限验证 先看一下我的项目的目录,我是在intellij idea 上开发的 1.先创建一个User类 1 package cn.lzc.po; 2 3 public class User ...

  3. 装饰器 -- 函数装饰器(tornado异常响应装饰器)

    装饰器 -- 函数装饰器(tornado异常响应装饰器) # 值可变,每次使用需要重新赋值 ERR_RESP_TEMPLATE = {"state": "FAILED&q ...

  4. python用户登录(输入用户名和密码)dic_Python使用装饰器模拟用户登陆验证功能示例...

    本文实例讲述了Python使用装饰器模拟用户登陆验证功能.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #!python3 user_list = [ {'name' ...

  5. 抽屉之Tornado实战(5)--点赞与评论树

    点赞 点赞的过程:数字增加,并在后台点赞表记录数据 需要发过去的数据:用户id,新闻id 用户id从session里获得,那新闻id怎么获取呢?这想到分页是循环新闻列表来展示内容,循环的新闻id可以做 ...

  6. 初学者python笔记(装饰器后篇:登陆验证)

    装饰器有非常强大的功能,可以不修改函数源代码和调用方式,就给函数加上了对应想要的功能,简直就是 修饰函数的利器. 上一篇文章:初学者python笔记(装饰器.高阶函数.闭包)已经非常详细的剖析了装饰器 ...

  7. 装饰器实现用户验证登录

    在实现用户验证的登录的时候可以使用装饰器工厂产生装饰器,让装饰器得到参数,从而判断登录类型,并验证用户登录条件,代码实现如下: def login_type(type):def Outer(F):de ...

  8. Struts2自定义类型转换器、自定义拦截器和用户输入数据的验证

    一.自定义类型转换器 1.编写一个类,继承com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter 2.覆盖掉其中的public Obj ...

  9. struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo

    理解 Interceptor拦截器类似于我们学过的过滤器,是可以在action执行前后执行的代码.是我们做web开发是经常使用的技术,比如权限控制,日志.我们也可以把多个interceptor连在一起 ...

最新文章

  1. Linux学习之zImage内核镜像解压过程详解
  2. 执行计划中cpu耗时_面试被问怎么排查遇到的系统CPU飙高和频繁GC,到底该怎么回答?...
  3. 林斌减持小米股份三天套现3.4亿引关注 小米官方、林斌齐回应...
  4. LiteIDE调试工具delve
  5. matlab随机线性微分方程,基于MATLAB的随机线性微分方程的求解
  6. 零库存挑战-分压电阻选择器V1.01【下载地址发布】
  7. java毕业设计投标文件在线制作系统mybatis+源码+调试部署+系统+数据库+lw
  8. 解决System进程占用80端口,关闭IIS服务
  9. 实变函数与泛函分析课本pdf_免费推荐几本实变函数和泛函分析的书
  10. win电脑主板设置的Bios密码清除方法
  11. 人,羊,狼,菜过河问题的计算机编程实现的matlab程序,人狼羊菜渡河问题(含Matlab程序)...
  12. 元数据管理器中存在错误
  13. stratum mining protocol demo
  14. idea列模式按列选取代码或按行选取代码快捷键
  15. Android开发经验、能力提升
  16. android驱动开发 老罗,在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序(老罗学习笔记3)...
  17. mysql高效率写法_Mysql模糊查询like效率,以及更高效的写法
  18. 新型的领导者是一名推动者,而不是一名发号施令者
  19. 随机性检测标准对比——国密GM/T 0005 vs NIST SP800-22r1a
  20. Suomi NPP VIIRS夜间灯光遥感数据简介与下载

热门文章

  1. nginx https 配置
  2. Postfix疯狂外发垃圾邮件之分析与解决
  3. 如何利用 Visual Studio 自带工具提高开发效率
  4. 页面的title为乱码的话需要修改jsp页面pageEncoding=UTF-8
  5. 如何正确的更换网站服务器?
  6. DHCP+TFTP+PXE自动网络引导安装Linux操作系统
  7. Mac上显示出.m2文件夹并将IDEA中的Maven修改为阿里云镜像
  8. 室内声场计算机模拟的声线跟踪法和虚声源法,基于声线跟踪法的室外声场仿真.doc...
  9. 今日恐慌与贪婪指数为72 贪婪程度有所缓解
  10. The LAO将于4月2日启动Neptune DAO,旨在为其他区块链项目提供流动性