flask为多个接口添加同一个拦截器的方法
前言
最近又抽掉出来写一个 Python 项目, 框架使用 Flask , 又有些新心得, 比如本篇所说, 想要将某个蓝图加上统一的权限控制, 比如 admin 蓝图全部有一个统一的拦截器判断是否有权限操作, 这里记录两个方法, 有利有弊
正文
使用 before_request 钩子
http://docs.jinkan.org/docs/flask/reqcontext.html?highlight=before_request#callbacks-and-errors
flask提供了几个钩子, 在不同情况下触发, 比如 before_request 钩子, 在每次请求进入正式的 view 前执行, 如果在这个过程中 return 则直接返回, before_request 钩子适用于 flask 的 app 对象, 也就是说可以为 flask 的一个最大的 app 创建全局的钩子, 但是我们的目的是为 admin 蓝图去做拦截校验, 因为蓝图的 bp 也是 app 所以我们也可以为单独的蓝图绑定钩子
效果如下
继承 MethodView
Flask 的即插视图类似于 Django ,使用类的方式来编写 view, 让我们可以使用 restful 的方式来编写接口
http://docs.jinkan.org/docs/flask/views.html
那么我们之前使用函数式编写接口时可以使用 装饰器 来达到执行某个逻辑前的校验, 在 即插视图 中也提供了这样的功能
http://docs.jinkan.org/docs/flask/views.html#id5
注册 decorators ,他的值是一个可迭代的类型, 请求会依次执行里面注册的函数, 执行完才执行逻辑代码, 类似于
但是我们的需求是某个蓝图下的所有接口都有一个统一的拦截器, 难道需要我们每一个视图都注册拦截器吗? 我们发现, 其实每个视图都继承了一个 MethodView 类, 我们是否可以使用继承的方式来解决呢? 肯定可以啊
于是代码修改为
以后需要使用该拦截器的视图都继承该自写的视图即可
需要注意的是: 如果装饰视图有多个, 比如
decorators = [cweVerify, admin_login_required]
那么其执行顺序是 admin_login_required > cweVerify 是反着来的, 这一点需要注意
另外, 该方法也可以使用 g 对象, 但是注意, 在即插视图中, 只有进入到请求的生命周期中才可以使用 g 对象
错误:
正确:
flask为多个接口添加同一个拦截器的方法的更多相关文章
- [代码笔记]VUE路由根据返回状态判断添加响应拦截器
//返回状态判断(添加响应拦截器) Axios.interceptors.response.use( res => { //对响应数据做些事 if (res.data && !r ...
- Vue添加请求拦截器
一.现象 统一处理错误及配置请求信息 二.解决 1.安装 axios , 命令: npm install axios --save-dev 2.在根目录的config目录下新建文件 axios.js ...
- SpringBoot2 添加应用拦截器
项目参考:详细参见:<Spring Boot 2精髓:从构建小系统到架构分布式大系统> 第三章 3.6.1节 拦截器 MyWebMvcConfigurer package com.arch ...
- AOP 貌似是拦截器 对方法进行拦截
AOP 貌似是拦截器 对方法进行拦截
- 在SpringBoot项目中添加SpringMVC拦截器
1.认识拦截器 SpringMVC的拦截器(Interceptor)不是Filer,同样可以实现请求的预处理.后处理.使用拦截器仅需要两个步骤 实现拦截器 注册拦截器 1.1实现拦截器 实现拦截器可以 ...
- MongoDB学习笔记~为IMongoRepository接口添加分页取集合的方法
回到目录 对于数据分页,我们已经见的太多了,几乎每个列表页面都要用到分页,这已经成了一种定理了,在进行大数据展示时,如果不去分页,而直接把数据加载到内存,这简直是不可以去相向的,呵呵,在很多ORM工具 ...
- [原创]java WEB学习笔记65:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) ModelDriven拦截器 paramter 拦截器
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- WebService cxf 接口中获得拦截器参数
1. 拦截器中put属性 Message message = PhaseInterceptorChain.getCurrentMessage(); message.put("AuthCode ...
- XML文档形式&JAVA抽象类和接口的区别&拦截器过滤器区别
XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式? a: 两种形式 dtd schemab: 本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上发 ...
随机推荐
- 廖雪峰官网学习js 数据类型和变量
数据类型: number 不分整数 和浮点数 字符串 用' ' " " 表示 布尔值 true false && 与运算符(都ture才ture ...
- python命名切片
命名切片 c = slice(2, 5) a = [1, 2, 3, 4, 5, 6, 7] print(a[c])
- CentOS7 扩容磁盘非根分区
CentOS7扩展磁盘分区 因为业务所在分区空间不足,需要扩容.分配磁盘大小为1T但实际使用过程中发现仅使用了500G左右空间,本次计划在原有磁盘上扩容1T,加上之前500G空闲直接扩容1.5TB ...
- git 常用命令--超实用
git命令行常用操作 1.配置ssh key git config --global user.name 'git用户名' git config --global user.email '邮箱地址' ...
- react中对内容点击复制
在react中一个标签内,点击这个标签直接复制标签内的内容 如图,我的需求是点击id这个标签实现对id的一键复制,所以请看copyHander函数 先创建一个Range对象,Range 对象表示文档的 ...
- 跨站点脚本编制 - SpringBoot配置XSS过滤器(基于Jsoup)
1. 跨站点脚本编制 风险:可能会窃取或操纵客户会话和 cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务. 原因:未对用户输入正确执行危险字符清 ...
- oracle 常用语句3
- oracle 函数 select sign(-3),sign(3), sign(0) from dual; select ceil(3.7) from dual; select floor(3.7 ...
- Spring MVC整合 freemarker
1.什么是Spring MVC? Spring MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将Web层进行职责解耦,基于请求驱 ...
- GDB —— 优化STL容器变量的显示
步骤 wget http://www.yolinux.com/TUTORIALS/src/dbinit_stl_views-1.03.txt cp dbinit_stl_views-1.03.txt ...
- sqlserver varchar和Nvarchar区别
sql server中的varchar和Nvarchar有什么区别? 答:varchar(n)长度为 n 个字节的可变长度且非 Unicode 的字符数据.n 必须是一个介于 1 和 8,000 ...