Web框架——Flask系列之请求上下文与应用上下文请求钩子Flask-Script扩展命令行(十七)

一、请求上下文和应用上下文

在这里插入图片描述

  1. 请求上下文(request context)
    request和session都属于请求上下文对象。

  2. 应用上下文(application context)
    current_app和g都属于应用上下文对象。
    current_app:表示当前运行程序文件的程序实例。
    g:处理请求时,用于临时存储的对象,每次请求都会重设这个变量

二、请求钩子

请求钩子是通过装饰器的形式实现,Flask支持如下四种请求钩子:

  1. before_first_request:在处理第一个请求前运行。
@app.before_first_request
  1. before_request:在每次请求前运行。

  2. after_request(response):如果没有未处理的异常抛出,在每次请求后运行。

  3. teardown_request(response):在每次请求后运行,即使有未处理的异常抛出。

from flask import Flask,session
app = Flask(__name__)
@app.route("/index",methods=["GET","POST"])
def index():print("index 被执行")return "index page"
# 四种钩子函数
@app.before_first_request
def handle_before_first_request():'''在第一次请求处理之前先被执行'''print("handle_before_first_request 被执行")
@app.before_request
def handle_before_request():'''在每次请求之前都被执行'''print("handle_before_request 被执行")
@app.after_request
def handle_after_request(response):'''每次请求(视图函数处理)之后都被执行,前提是视图函数中没有出现异常'''print("handle_after_request 被执行")return response
@app.teardown_request
def handle_teardown_request(response):'''无论视图函数中有没有出现异常,每次请求(视图函数处理)之后都被执行'''print("handle_teardown_request 被执行")return response
if __name__ == '__main__':app.run(debug=True)

在这里插入图片描述

通过判断请求路径url 来让钩子函数根据视图的不同执行不同的处理函数:

from flask import Flask,request,url_for
app = Flask(__name__)
@app.route("/index",methods=["GET","POST"])
def index():print("index 被执行")# a=1/0return "index page"@app.route("/hello")
def hello():print("hello 被执行")return "hello page"# 四种钩子函数
@app.before_first_request
def handle_before_first_request():'''在第一次请求处理之前先被执行'''print("handle_before_first_request 被执行")
@app.before_request
def handle_before_request():'''在每次请求之前都被执行'''print("handle_before_request 被执行")
@app.after_request
def handle_after_request(response):'''每次请求(视图函数处理)之后都被执行,前提是视图函数中没有出现异常'''print("handle_after_request 被执行")return response@app.teardown_request
def handle_teardown_request(response):'''无论视图函数中有没有出现异常,每次请求(视图函数处理)之后都被执行'''path = request.pathif path == url_for("index"):print("这是在请求钩子中,判断请求的视图逻辑:index")elif path == url_for("hello"):print("这是在请求钩子中,判断请求的视图逻辑:hello")print("handle_teardown_request 被执行")return responseif __name__ == '__main__':app.run(debug=True)

在这里插入图片描述

三、Flask-Script扩展命令行

pip install Flask-Script
在这里插入图片描述

from flask import Flask
from flask_script import Managerapp = Flask(__name__)manager = Manager(app)@app.route('/')
def index():return '床前明月光'if __name__ == "__main__":manager.run()    ...

Terminal 终端中运行:
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

LeetCode 2202. K 次操作后最大化顶端元素

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的整数数组 nums ,它表示一个 栈 ,其中 nums[0] 是栈顶的元素。 每一次操作中,你可以执行以下操作 之一 : 如果栈非空,那么 删除 栈顶端的元素。如果存在 1 个…

Web框架——Flask系列之宏、继承、包含(十八)

一、宏 类似于python中的函数,宏的作用就是在模板中重复利用代码,避免代码冗余。 Jinja2支持宏,还可以导入宏,需要在多处重复使用的模板代码片段可以写入单独的文件,再包含在所有模板中,以避免重复。 定…

Web框架——Flask系列之Flask中的特殊变量和方法(十九)

在Flask中,有一些特殊的变量和方法是可以在模板文件中直接访问的。 一、config对象 config 对象就是Flask的config对象,也就是 app.config 对象。 {{ config.SQLALCHEMY_DATABASE_URI }}二、request 对象 就是 Flask 中表示当前请求的 request 对象&am…

数据库和ORMS:使用SQLAlchemy与数据库通信

文章目录1. 环境安装2. 使用SQLAlchemy与SQL数据库通信2.1 创建表2.2 连接数据库2.3 insert、select2.4 update、delete2.5 relationships2.6 用Alembic进行数据库迁移learn from 《Building Data Science Applications with FastAPI》1. 环境安装 docker 安装 MongoDB 服务 d…

Web框架——Flask系列之数据库迁移(二十)

一、Flask-Migrate扩展 在开发过程中,需要修改数据库模型,而且还要在修改之后更新数据库。最直接的方式就是删除旧表,但这样会丢失数据。 更好的解决办法是使用数据库迁移框架,它可以追踪数据库模式的变化,然后把变动…

LeetCode 2206. 将数组划分成相等数对

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums ,它包含 2 * n 个整数。 你需要将 nums 划分成 n 个数对,满足: 每个元素 只属于一个 数对。同一数对中的元素 相等 。 如果可以将 nums 划分成 n 个数对,请你返回 true …

【iCore3 双核心板】例程三十五:HTTP_IAP_ARM实验——更新升级STM32

实验指导书及代码包下载: http://pan.baidu.com/s/1eRgzSPW iCore3 购买链接: https://item.taobao.com/item.htm?id524229438677 转载于:https://www.cnblogs.com/xiaomagee/p/5143326.html

Web框架——Flask系列之蓝图Blueprint(二十一)

一、为什么学习蓝图? 我们学习Flask框架,是从写单个文件,执行hello world开始的。我们在这单个文件中可以定义路由、视图函数、定义模型等等。但这显然存在一个问题:随着业务代码的增加,将所有代码都放在单个程序文件…

LeetCode 2207. 字符串中最多数目的子字符串(前缀和)

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的字符串 text 和另一个下标从 0 开始且长度为 2 的字符串 pattern ,两者都只包含小写英文字母。 你可以在 text 中任意位置插入 一个 字符,这个插入的字符必须是 pattern[0] 或者 pattern[1] 。注…

指令系统——指令格式(详解)

一、总览 二、指令的定义 指令(又称机器指令): 是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。 一台计算机的所有指令的集合构成该机的指令系统,也称为指令集。 注:一台计算机只能执行自己…

MySQL中Index Condition Pushdown(ICP)优化

在MySQL 5.6开始支持的一种根据索引进行查询的优化方式。之前的MySQL数据库版本不支持ICP,当进行索引查询是,首先根据索引来查找记录,然后在根据WHERE条件来过滤记录。在支持ICP后,MySQL数据库会在取出索引的同时,判断…

LeetCode 2208. 将数组和减半的最少操作次数(优先队列)

文章目录1. 题目2. 解题1. 题目 给你一个正整数数组 nums 。每一次操作中,你可以从 nums 中选择 任意 一个数并将它减小到 恰好 一半。(注意,在后续操作中你可以对减半过的数继续执行操作) 请你返回将 nums 数组和 至少 减少一半…

指令系统——数据存放、指令寻址(详解)

一、总览 二、数据存放 三、指令寻址 四、小结:

数据库和ORMS:使用Tortoise ORM与数据库通信

文章目录1. 安装环境2. 创建数据库模型3. 设置 Tortoise 引擎4. create5. 查询6. 修改、删除7. 添加关联8. 用Aerich建立数据库迁移系统learn from 《Building Data Science Applications with FastAPI》Tortoise ORM 是一种现代异步 ORM,非常适合 FastAPI项目 1. …

指令系统——数据寻址(1)(详解)

一、总览 二、操作数类型与寻址方式 三、数据寻址 四、立即寻址 立即寻址:形式地址A就是操作数本身,又称为立即数,一般采用补码形式。#表示立即寻址特征。 一条指令的执行:取指令访存1次,执行指令访存0次,暂…

使用 docker 搭建开发环境

作为一个 freelancer,经常能够接到很多的开发工作,这些金主,有喜欢 PHP 的,有习惯撒手不管的;有偏好 sqlite 的,也有喜欢 PG 的,我甚至见过 mysql、PG 一起使用的项目;同一门语言下&…

数据库和ORMS:使用 Motor 跟 MongoDB 通信

文章目录1. 安装2. 创建models3. 连接数据库4. 插入文档5. 查询6. 更新、删除7. 嵌套文档learn from 《Building Data Science Applications with FastAPI》面向文档的数据库(如MongoDB)不需要预先配置模式 Motor,这是一个用于与 MongoDB 异…

指令系统——数据寻址(2)(详解)

一、总览 二、偏移寻址 基址寻址:将CPU中基址寄存器(BR)的内容加上指令格式中的形式地址A,而形成操作数的有效地址,即EA(BR)A。 注:基址寄存器是面向操作系统的,其内容由…

十五、MySQL变量(系统变量、自定义变量)相关知识总结

变量: 系统变量: a.全局变量 b.会话变量 自定义变量: a.用户变量 b.局部变量 一、系统变量 说明:变量由系统定义,不是用户定义,属于服务器层面 注意:全局变量需要添加global关键字,会话变量…

LeetCode 2210. 统计数组中峰和谷的数量

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的整数数组 nums 。如果两侧距 i 最近的不相等邻居的值均小于 nums[i] ,则下标 i 是 nums 中,某个峰的一部分。 类似地,如果两侧距 i 最近的不相等邻居的值均大于 nums[i] ,…