当前位置: 首页 > news >正文

如何在 Tornado 中实现 Middleware

定义 Middleware

    class MiddleWare(object):
        def process_request(self, request):
            #request是一个RequestHandler的实例
            pass
    
        def process_response(self, request):
            pass
 

实现登录检查 Middleware


class AuthorizationException(Exception):
    def __init__(self, msg):
        super(AuthorizationException, self).__init__(403, msg)


class CheckLogin(MiddleWare):

    def is_login(self, requesthandler):
        return True
        
    def process_request(self, request):
        if must_login(request):
            if not self.is_login(request):
                raise AuthenticationException(403, "login required")

    def is_login(self, request):
        return request.get_session() != None

找地方注册 Middleware

  1. 可以在 Tornado 初始化的时候将Middleware注册到 Application 中

调用 Middlware

class MiddleRequestHandler(RequestHandler):
    def prepare(self):
        
        for middleware in self.app.middleware:
            middleware.process_request(self)
        
    def finish(self):
        for middleware in self.app.middleware:
            middleware.process_response(self)

        super(MiddleRequestHandler, self).finish()

可以运行的例子

  1. 实现登录检查

  2. 在线统计

https://gist.github.com/alex8224/7e4ca9a27727cf2a86b6

相关文章:

  • Cannot run program git.exe: CreateProcess error=
  • 自建博客随想录
  • JAVA简单介绍1
  • jquery iCheck插件 全选和获取value值的解决方法
  • Cocos2dx3.4 VS2013无法打开包括文件extensions/ExtensionExport.h解决的方法
  • 自定义控件ToggleButton滑动开关
  • 关于初高中虚拟仿真实验室解决方案
  • udp开发-dtd验证,dom解析
  • 不创建第三方变量对整型数组逆置
  • 封装一个地图中间件,愉快的切换百度地图和谷歌地图...
  • ListView的属性详解和探究
  • Javascript模块化编程(三):require.js的用法
  • 《Node.js入门》CentOS 6.5下Node.js Web开发环境搭建笔记
  • Xms Xmx PermSize MaxPermSize 区别
  • ssh 远程登陆 refuse
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • 2017-08-04 前端日报
  • CSS实用技巧干货
  • HTML中设置input等文本框为不可操作
  • Java教程_软件开发基础
  • Making An Indicator With Pure CSS
  • Meteor的表单提交:Form
  • ng6--错误信息小结(持续更新)
  • node 版本过低
  • Python 基础起步 (十) 什么叫函数?
  • 给新手的新浪微博 SDK 集成教程【一】
  • 后端_ThinkPHP5
  • 容器服务kubernetes弹性伸缩高级用法
  • 数据结构java版之冒泡排序及优化
  • 写代码的正确姿势
  • 一天一个设计模式之JS实现——适配器模式
  • 自动记录MySQL慢查询快照脚本
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​虚拟化系列介绍(十)
  • $(selector).each()和$.each()的区别
  • (+4)2.2UML建模图
  • (12)Linux 常见的三种进程状态
  • (MATLAB)第五章-矩阵运算
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • .htaccess配置常用技巧
  • .Net Core 中间件验签
  • ::前边啥也没有
  • @vue/cli 3.x+引入jQuery
  • [ linux ] linux 命令英文全称及解释
  • [ 云计算 | AWS ] AI 编程助手新势力 Amazon CodeWhisperer:优势功能及实用技巧
  • [2013][note]通过石墨烯调谐用于开关、传感的动态可重构Fano超——
  • [20171101]rman to destination.txt
  • [AIGC] SQL中的数据添加和操作:数据类型介绍
  • [Android]通过PhoneLookup读取所有电话号码
  • [C#]winform部署PaddleOCRV3推理模型