码迷,mamicode.com
首页 > 其他好文 > 详细

flask为多个接口添加同一个拦截器的方法

时间:2020-07-23 23:27:28      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:情况   request   callback   添加   load   执行   进入   alt   项目   

前言

最近又抽掉出来写一个 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 类, 我们是否可以使用继承的方式来解决呢? 肯定可以啊

于是代码修改为

技术图片

以后需要使用该拦截器的视图都继承该自写的视图即可

flask为多个接口添加同一个拦截器的方法

标签:情况   request   callback   添加   load   执行   进入   alt   项目   

原文地址:https://www.cnblogs.com/chnmig/p/13368569.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!