flask------请求拓展

flask中也有类似与django中的中间件,只不过是另一种写法,但是他们的作用是一样的,下面我们就一一介绍:

1.before_request   

  • 作用 : before_request 相当于 django 中的 process_request,每一个请求在被处理前都会经过这个方法
  • 应用 : 用户登录认证(这样避免了每一个视图函数都加用户登录认证的装饰器)
  • 注意 : before_request 的返回值为 None 才会往后走, 否则直接返回你的返回值,如果定义了after_request那么会接着它执行, 最终本次请求响应结束
from flask import Flask, request, render_template, session, url_for, redirect, flash, get_flashed_messages
from markupsafe import Markupapp = Flask(__name__)
app.debug = Trueapp.secret_key = 'the_secret_key'@app.before_request
def process_request(*args, **kwargs):# 判断访问的是不是登入路径,是的话返回None继续往后走if request.path == '/login':return Noneelse:# 不是的话判断是否携带用户信息(判断是否登入状态)username = session.get('username')print('username', username)if username:return Noneelse:# 如果没有,则重定向到登入界面return redirect('/login')@app.route('/login')
def login():username = request.args['username']print(username)if username == 'shawn':session['username'] = usernamereturn redirect('/index')else:return render_template('login.html')@app.route('/index')
def index():return render_template('index.html')if __name__ == '__main__':app.run()

 2. after_request

  • 作用 : 类比django中间件中的process_response,如果请求没有出现异常的情况下, 会在请求返回return之前执行. 但是如果有多个顺序是从下往上执行.

  • 与Django中process_response的区别

Django中当请求返回return后, 会从当前位置结束接着从当前位置response出去Flask中的after_request请求返回return之后, 后面的response也会一个个走完
@app.after_request  # 后执行
def process_response1(response):print('process_response1')return response@app.after_request  # 先执行
def process_response2(response):print('process_response2')return response

3.before_first_request

  • 作用 : 顾名思义, 项目启动第一次请求时触发执行
  • 应用 : 项目初始化用来保证以后项目只要不重启就不再继续执行
@app.teardown_request
def ter(e):print("不管什么情况,都会触发,即便遇到了异常")

4. teardown_request

  • 效果 : 不管什么情况, 都会触发, 即便遇到了异常, 并且返回return没有任何效果, 无法控制返回结果
  • 应用 : 记录日志
@app.teardown_request
def ter(e):print("不管什么情况,都会触发,即便遇到了异常")

5.errorhandler

  • 作用: 绑定错误的状态码进而可以捕获服务器的错误, 并返回对应的错误页面
@app.errorhandler(404)
def error_404(arg):return "404页面找不到了..."

6.template_global

  • 作用: 全局的标签, 在任意的html页面中就可以直接使用, 不需要在render_template中传递参数以后才能使用
@app.template_global()
def gl(a1, a2):return a1 + a2# html 文件中使用
{{ gl(1,2) }}

 7.template_filter

  • 作用: 全局的过滤器, 在任意的html页面中就可以直接使用, 不需要在render_template中传递参数以后才能使用
@app.template_filter()
def db(a1, a2, a3):return a1 + a2 + a3# html 文件中使用,相比较Django的过滤器最多只能传两个参数,这里可以传多个
# 1传给a1,2-->a2,3-->a3
{{ 1|db(2,3) }}

详细:🍖Flask请求扩展及中间件 - 给你骨质唱疏松 - 博客园 (cnblogs.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/20200.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA环境变量配置(windows)

windows配置环境变量(大小写不区分): 新建JAVA_HOME:jdk的根目录 D:\Java\jdk1.8.0_71Path(必须)%JAVA_HOME%\bin新建(类路径)CLASSPATH: .;D:\Java\jdk1.8.0_71\lib(或者.;%JAVA_HO…

【外卖系统】套餐管理

新增套餐 需求分析 后台可以管理套餐信息,通过新增套餐功能来添加一个新的套餐,在添加套餐时需要选择当前套餐所属的套餐分类和包含的菜品,并需要上传套餐对应的图片。 页面发送ajax请求,请求服务端获取套餐分类数据并展示到下…

最细致讲解yolov8模型推理完整代码--(前处理,后处理)

研究yolov8时,一直苦寻不到Yolov8完整的模型推理代码演示,大部分人都是基于Yolo已经封装好的函数调用,这个网上教程很多,本文就不赘述这方面的内容了,接下来将细致全面的讲解yolov8模型推理代码,也就是yolo…

卡片的点击事件通过点击进行路由传参

下面是详情页 通过 接收 <template><div class"detail"><img :src"row.imgUrl"><van-icon name"arrow-left" click"back" /></div> </template><script> export default {created() {let …

Webpack 安装教程

Webpack 是一个前端资源加载/打包工具。 安装 Webpack 使用 cnpm 安装 webpack&#xff1a; cnpm install webpack -g 创建项目 接下来我们创建一个目录 app&#xff1a; mkdir app 在 app 目录下添加 runoob1.js 文件&#xff0c;代码如下&#xff1a; app/runoob1.js 文件…

LeetCode每日一题Day4——26. 删除有序数组中的重复项

✨博主&#xff1a;命运之光 &#x1f984;专栏&#xff1a;算法修炼之练气篇&#xff08;C\C版&#xff09; &#x1f353;专栏&#xff1a;算法修炼之筑基篇&#xff08;C\C版&#xff09; &#x1f433;专栏&#xff1a;算法修炼之练气篇&#xff08;Python版&#xff09; …

【分布式任务调度平台 XXL-JOB 急速入门】从零开始将 XXL-JOB 接入到自己的项目

&#x1f4a7; 分布式任务调度平台 X X L − J O B 急速入门&#xff1a;从零开始将 X X L − J O B 接入到自己的项目 \color{#FF1493}{分布式任务调度平台 XXL-JOB 急速入门&#xff1a;从零开始将 XXL-JOB 接入到自己的项目} 分布式任务调度平台XXL−JOB急速入门&#xff1a…

增强知识保护和知识管理:PDM系统的知识库特色

在现代竞争激烈的商业环境中&#xff0c;知识保护和知识管理对企业的发展至关重要。PDM系统&#xff08;Product Data Management&#xff0c;产品数据管理&#xff09;作为一款强大的数字化工具&#xff0c;具备丰富的知识库特色&#xff0c;帮助企业增强知识保护和知识管理的…

《TCP IP 网络编程》第十五章

第 15 章 套接字和标准I/O 15.1 标准 I/O 的优点 标准 I/O 函数的两个优点&#xff1a; 除了使用 read 和 write 函数收发数据外&#xff0c;还能使用标准 I/O 函数收发数据。下面是标准 I/O 函数的两个优点&#xff1a; 标准 I/O 函数具有良好的移植性标准 I/O 函数可以利用…

FPGA学习——蜂鸣器实现音乐播放器并播放两只老虎

文章目录 一、蜂鸣器简介1.1 蜂鸣器分类1.2 PWM 二、C4开发板原理图三、如何产生不同的音调四、代码实现及分析五、总结 一、蜂鸣器简介 1.1 蜂鸣器分类 蜂鸣器一般分为有源蜂鸣器和无源蜂鸣器。二者的区别在于&#xff0c;有源蜂鸣器内部含有振动源和功放电路&#xff0c;只…

前端如何打开钉钉(如何唤起注册表中路径与软件路径不关联的软件)

在前端唤起本地应用时&#xff0c;我查询了资料&#xff0c;在注册表中找到腾讯视频会议的注册表情况&#xff0c;如下&#xff1a; 在前端代码中加入 window.location.href"wemeet:"; 就可以直接唤起腾讯视频会议&#xff0c;但是我无法唤起钉钉 之所以会这样&…

【Android】使用 CameraX 实现基础拍照功能

目录 1. 基础开发环境 2. 添加相关依赖 3. APP 布局 4. 主流程逻辑 5. 调试或安装 APK 6. 项目完整代码 1. 基础开发环境 JDK&#xff1a;JDK17 Android Studio&#xff1a;Android Studio Giraffe | 2022.3.1 Android SDK&#xff1a;Android API 34 Gradle: gradle-7.2…

前端如何并发控制

本文节选自我的博客&#xff1a;前端如何并发控制 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是MilesChen&#xff0c;偏前端的全栈开发者。&#x1f4dd; CSDN主页&#xff1a;爱吃糖的猫&#x1f525;&#x1f4e3; 我的博客&#xff1a;爱吃糖的猫&#x1f4d…

2023年人工智能技术与智慧城市发展白皮书

人工智能与智慧城市是当前热门的话题和概念&#xff0c;通过将人工智能技术应用在城市管理和服务中&#xff0c;利用自动化、智能化和数据化的方式提高城市运行效率和人民生活质量&#xff0c;最终实现城市发展的智慧化&#xff0c;提升城市居民的幸福感。 AI技术在城市中的应…

QT中使用ffmpeg的api进行视频的播放

在了解ffmpeg使用api进行视频的播放之前&#xff0c;我们首先了解一下视频的播放流程。 一、视频的播放流程 首先是我们最常见的视频文件&#xff0c;在播放流程中首先是要打开视频文件&#xff0c;将视频文件中的数据进行解封装&#xff0c;之后再将解封装之后的视频进行解码…

【C#学习笔记】引用类型(2)

文章目录 ObjectEqualsGetTypeToStringGetHashCode string逐字文本复合格式字符串字符串内插 StringBuilderStringBuilder 的工作原理StringBuilder提供的方法访问字符迭代字符查询字符 dynamic Object 支持 .NET 类层次结构中的所有类&#xff0c;并为派生类提供低级别服务。…

【docker】docker镜像原理

目录 一、操作系统组成部分二、Linux文件系统三、docker镜像原理四、说明五、镜像制作5.1 方式一&#xff1a;容器转镜像5.2 方式二&#xff1a;dockerfile5.2.1 dockerfile说明5.2.2 dockerfile关键字 一、操作系统组成部分 1.进程调度子系统 2.进程通信子系统 3.内存管理子系…

Python实现GA遗传算法优化循环神经网络分类模型(LSTM分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;最早是由美国的 John holland于20世…

实战 02|「可点击图片」

前言 实践是最好的学习方式&#xff0c;技术也如此。 文章目录 前言一、功能需求&#xff08;一&#xff09;1、功能需求描述 一、功能需求&#xff08;一&#xff09; 1、功能需求描述 用户可以点击图片来执行相应的操作&#xff08;显示 Toast 信息&#xff09;&#xff1b;…

全面解析大语言模型的工作原理

当ChatGPT在去年秋天推出时&#xff0c;在科技行业乃至世界范围内引起了轰动。当时&#xff0c;机器学习研究人员尝试研发了多年的语言大模型&#xff08;LLM&#xff09;&#xff0c;但普通大众并未十分关注&#xff0c;也没有意识到它们变得多强大。 如今&#xff0c;几乎每个…