Flask之钩子函数

类似django的中间件,作用就是在进入框架的之后 http方法之前或返回response之前进行一些操作 Flask的钩子函数可在注册时根据注册的app或者蓝图从而确定钩子函数作用的范围(可全局 也可作用某一个蓝图)

方法:

一共四种方方法

before_first_request()

执行时间:在处理第一个请求前运行 before_request之前

格式:

@App.before_app_first_request
def before_app_first_request():pass

参数:

​ 没有参数

返回值:

​ None 请求继续

​ response对象 终止本次请求 直接返回结果

before_request()

执行时间:每次请求都执行 http方法之前

格式:

@App.before_app_request
def before_app_request():pass

参数:

​ 没有参数

返回值:

​ None 请求继续

​ response对象

after_request()

执行时间:如果没有未处理的异常抛出,在每次请求后运行(http方法之后执行)

格式:

@App.after_request
def after_request(response):passreturn response

参数:

​ 视图方法中返回的response对象

返回值:

​ response对象 可在返回前修改

teardown_request()

执行时间:在每次请求后运行,即使有未处理的异常抛出也执行

格式:

@App.teardown_request
def teardown_request(response):passreturn response

参数:

​ exception错误信息

返回值:

​ None

示例:

仿照Django中的中间件

第一步

应用目录下创建middlewares包目录,每个功能实现以个中间件(每个功能是一个py文件)

第二步

在middlewares目录下创建中间件文件

from flask import request
from flask import session
from flask import g#参数:蓝图对象
def verifycodeMiddleware(blueprint):@blueprint.before_app_requestdef before():print("------验证验证码-------")

第三步

注册中间件(蓝图文件中)

# 注册中间件
from myApp.middlewares import verifycodeMiddleware
verifycodeMiddleware(myApp)

扩展:

from flask import request
from flask import session
from flask import g#参数:蓝图对象
def verifycodeMiddleware(app):@app.before_requestdef before():print("****验证验证码****")
app.py -》注册 verifycodeMiddleware(app)

说明

# 钩子函数
@myApp.before_app_first_request
def first():print("-------------first")
@myApp.before_app_request
def before():print("-------------before")# 验证验证# 获取前端发送的验证码# 获取session中的验证码# 判断两者是否相同,相同返回None,否则重定向会登陆界面# 验证是否登录# 获取状态保持相关信息(账号)# 如果没有状态保持说明没有登陆,重定向登陆界面# 根据状态保持的账号获取用户对象# 获取客户端发送的cookie中的键为token的值# 如果没有说明没有登陆,重定向登陆界面# 判断用户中的token与cookie中的token值是否相同,不相同则重定向登陆界面
@myApp.after_app_request
def after(response):print("-------------after")return response@myApp.teardown_app_request
def teardown(exception):print("-------------teardown")print(exception)

信息来源:sunck

Flask之钩子函数相关推荐

  1. mysql 钩子函数_Flask钩子函数是什么

    Flask钩子函数 在Flask中钩子函数是使用特定的装饰器的函数.为什么叫做钩子函数呢,是因为钩子函数可以在正常执行的代码中,插入一段自己想要执行的代码,那么这种函数就叫做钩子函数. before_ ...

  2. Flask入门flask-script 蓝本 钩子函数(三)

    1 flask-script扩展库 概念: 是一个flask终端运行的解析器 ,因为项目完成以后,代码改动会有风险,所以借助终端完成不同启动项的配置 安装 pip3 install flask-scr ...

  3. 【Python】Flask框架系列(三):session和cookie操作、get/post请求、钩子函数

    在Flask中操作session 示例:设置session的过期时间 完整版 旧版 设置session的过期时间 示例 # encoding: utf-8from flask import Flask ...

  4. Vue2.0 探索之路——生命周期和钩子函数的一些理解

    前言 在使用vue一个多礼拜后,感觉现在还停留在初级阶段,虽然知道怎么和后端做数据交互,但是对于mounted这个挂载还不是很清楚的.放大之,对vue的生命周期不甚了解.只知道简单的使用,而不知道为什 ...

  5. 使用钩子函数[4] - 钩子链和 CallNextHookEx 的返回值

    SetWindowsHookEx 函数的第一个参数表示钩子类型, 共有 14 种选择, 前面我们已经用过两种: WH_KEYBOARD.WH_MOUSE. 系统会为每一种类型的钩子建立一个表(那就是 ...

  6. vue 函数 路由跳转_vue路由的钩子函数和跳转

    首页可以控制导航跳转,beforeEach,afterEach等,一般用于页面title的修改.一些需要登录才能调整页面的重定向功能. beforeEach主要有3个参数to,from,next. t ...

  7. actived生命周期_vue生命周期钩子函数actived没有执行

    调用actived钩子函数,发现代码没有执行.......为何vue 背景技术选型:vue+vue-router+vuex 第一步:路由配置文件设置keepAlive=truevue-router / ...

  8. vue函数如何调用其他函数?_从源码中学Vue(一)生命周期中的钩子函数的那点事儿...

    欢迎来到我的<从源码中学Vue>专题系列文章,更多精彩内容持续更新中,欢迎关注 :) Vue作为当下前端最流行的框架之一,在国内占绝对的优势.所以接下来我们一起来学习它吧! 我不会像其它人 ...

  9. mounted钩子函数_vue3.0项目开发(八)新特性之响应式系统watchEffect函数

    watchEffect会立即执行传入的一个函数,并响应式追踪其依赖,并在其依赖变更时重新运行该函数. vue3.0 beta {{ original.count }} ----- {{ copy.co ...

最新文章

  1. AI公司融了1500万美元,却引来LeCun「嘲讽三连」,还要出书调侃CEO?
  2. 嵌入式学习笔记-记录系统启动次数
  3. yii2 后台权限验证获取用户身份_前、后端分离权限控制设计与实现
  4. BIEE建模 之 Administration 导入元数据时无法显示表
  5. MSVCRTD.lib(crtexe.obj) : error LNK2019
  6. Android adb命令,linux中各种命令
  7. ORACLE数据库表空间备份方案
  8. 安卓在代码中设置TextView的drawableLeft、drawableRight、drawableTop、drawableBottom
  9. Java并发编程—ThreadLocal用法详解
  10. 安徽工业大学计算机考研历年分数线,安徽工业大学历年考研分数线汇总[2012-2021]...
  11. html中隐式转换成数字,关于 JS 类型隐式转换的完整总结
  12. python生成范围内随机数_python在一个范围内取随机数的方法是什么
  13. kickstart模式实现批量安装centos7.x系统
  14. 【codevs3044】矩形面积求并【POJ1151】Atlantis,第一次的扫描线
  15. 基于人脸识别的课堂签到管理系统(四)---摄像头上传实时数据,百度AI读取并返回信息以及多线程操作
  16. Predict user model based on genus
  17. Android读取手机通讯录
  18. oracle odi 目标数据存储: 临时目标数据存储未与连接关联,ODI知识模块--IKM Oracle Incremental Update...
  19. 腾讯云服务器怎么进行学生认证?需要注意什么?
  20. Git官网下载windows版本慢的问题

热门文章

  1. android url inputstream,Android HttpUrlConnection getInputStream引发NullPoint...
  2. OpenGLES(八)GPUImage滤镜链与将滤镜修改后的图片保存到相册
  3. tf计算矩阵维度_tensorflow tf.matmul() (多维)矩阵相乘(多维矩阵乘法)
  4. iframe页面的内嵌框架
  5. Delphi2007来了
  6. 实战大项目:模拟登录丁香园,并抓取论坛页面所有的人员基本信息与回复帖子内容----爬取第二步
  7. 常见的四种计量标识及其含义(CNAS / ILAC / CMC / CMA)
  8. Bootstrap入门使用
  9. PP-ShiTu: A Practical Lightweight Image Recognition System
  10. 你是如何学习Java的?