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 onreadystatechange 和 onload的区别
IE的script 元素只支持onreadystatechange事件,不支持onload事件. FF的script 元素不支持onreadystatechange事件,只支持onload事件. 如果 ...
- 开发实践丨用小熊派STM32开发板模拟自动售货机
摘要:本文内容是讲述用小熊派开发板模拟自动售货机,基于论坛提供的工程代码,通过云端开发和设备终端开发,实现终端数据在的华为云平台显示. 本文内容是讲述用小熊派开发板模拟自动售货机,基于论坛提供的工程代 ...
- AcWing 380. 舞动的夜晚
大型补档计划 题目链接 这题是求必须边,而不是不可行边,因为不可行边 = 必须边 + 死掉了的边(貌似lyd第三版书上还是说的不可行边)先跑最大流. 在跑完以后的残余网络上,对于一条当前匹配的边 \( ...
- 配置 Spring Batch 批处理失败重试机制
1. 引言 默认情况下,Spring批处理作业在执行过程中出现任何错误都会失败.然而有些时候,为了提高应用程序的弹性,我们就需要处理这类间歇性的故障. 在这篇短文中,我们就来一起探讨 如何在Sprin ...
- MySQL事务(二)事务隔离的实现原理:一致性读
今天我们来学习一下MySQL的事务隔离是如何实现的.如果你对事务以及事务隔离级别还不太了解的话,这里左转. 好的,下面正式进入主题.事务隔离级别有4种:读未提交.读提交.可重复读和串行化.首先我们来说 ...
- window+nginx+php
今天在Windows上配置了下nginx,看了不少其他大牛们记录的博客,自己也操作了一番,记录一下备忘. nginx download: http://nginx.org/en/download.ht ...
- JavaSE15-集合·其二
1.Set集合 1.1 Set集合概述和特点 Set集合的特点 元素存取无序 没有索引.只能通过迭代器或增强for循环遍历 不能存储重复元素 1.2 哈希值 哈希值简介 是JDK根据对象的地址或者字符 ...
- Kubernetes弃用Docker后怎么办?
本文转自Rancher Labs 近期,Kubernetes在其最新的Changelog中宣布,自Kubernetes 1.20之后将弃用Docker作为容器运行时.这一消息在云原生领域激起了不小的水 ...
- 多任务-python实现-使用生成器完成多任务(2.1.14)
@ 目录 1.注意 2. 代码 关于作者 1.注意 先定义函数,函数里面放一个yiled 主函数生成该对象 执行while循环 调用生成器对象的next 因为每次调用next,不会继续执行,从而 完成 ...
- SQL注入-DNS注入(一)
这篇文章相对来说比较入门,参考的文章是:https://www.jianshu.com/p/c805209244c2 0x00前言 前段时间在做盲注 分别是基于时间和基于布尔型的 说真的 这两种盲注真 ...