【测开能力提升-fastapi框架】fastapi能力提升 - 中间件与CORS

1. 中间件

1.1 介绍(ChatGPT抄的,大致可以理解)

一种机制,用于在处理请求和响应之前对其进行拦截、处理或修改。中间件可以在应用程序的请求处理管道中插入自定义逻辑,以实现一些通用的功能,如身份验证、日志记录、错误处理等。

中间件在请求到达应用程序之前被执行,并在应用程序生成响应之前被执行。它们可以对请求进行修改、记录请求信息、添加额外的响应头,甚至可以拒绝请求或提前返回响应。

在FastAPI中,可以通过编写中间件函数来定义中间件逻辑。这些函数接收一个Request对象和一个Callable对象(代表下一个中间件或请求处理器)作为参数,并返回一个Response对象。

注释:
我理解就是在中间件里写一个函数,所有路由函数在执行前都会执行此函数

1.2 示例

import uvicorn
from fastapi import FastAPI, Requestapp = FastAPI()# 中间件
@app.middleware("http")
async def m2(request:Request, call_next):# 请求代码块print("m2 request")response = await call_next(request)# 响应代码块print("m2 response")return response@app.middleware("http")
async def m1(request: Request, call_next):# 请求代码块print("m1 request")response = await call_next(request)# 响应代码块print("m1 response")return response@app.get("/user")
async def get_user():print("get_user函数执行")return {"user":"current user"}@app.get("/item/{item_id}")
async def get_item(item_id:int):print("get_item函数执行")return {"item_id":item_id}if __name__ == "__main__":uvicorn.run("main:app", port=5050, reload=True)

注释:
执行顺序为:request先下后上,response先上后下,先执行request,再执行response

在这里插入图片描述

1.3 示例

import timeimport uvicorn
from fastapi import FastAPI, Requestfrom fastapi.responses import Responseapp = FastAPI()# 中间件
@app.middleware("http")
async def m2(request:Request, call_next):# 请求代码块print("m2 request")response = await call_next(request)# 响应代码块print("m2 response")return response@app.middleware("http")
async def m1(request: Request, call_next):# 请求代码块print("m1 request")# 示例:访问url限制if request.client.host in ["127.0.0.1",]:return Response(status_code=403, content="visit forbidden")# 示例:访问路径限制if request.url.path in ["/user"]:return Response(status_code=403, content="visit forbidden")response = await call_next(request)# 响应代码块print("m1 response")return response@app.get("/user")
async def get_user():print("get_user函数执行")return {"user":"current user"}@app.get("/item/{item_id}")
async def get_item(item_id:int):print("get_item函数执行")return {"item_id":item_id}if __name__ == "__main__":uvicorn.run("main:app", host="127.0.0.1", port=5050, reload=True)

在这里插入图片描述

1.4 response响应示例

import timeimport uvicorn
from fastapi import FastAPI, Requestfrom fastapi.responses import Responseapp = FastAPI()# 中间件
@app.middleware("http")
async def m2(request:Request, call_next):# 请求代码块print("m2 request")response = await call_next(request)# 响应代码块print("m2 response")return response@app.middleware("http")
async def m1(request: Request, call_next):# 请求代码块print("m1 request")# 示例:访问url限制# if request.client.host in ["127.0.0.1",]:#     return Response(status_code=403, content="visit forbidden")# # 示例:访问路径限制# if request.url.path in ["/user"]:#     return Response(status_code=403, content="visit forbidden")start = time.time()response = await call_next(request)# 响应代码块print("m1 response")end = time.time()response.headers["ProcessTimer"] = str(end - start)return response@app.get("/user")
async def get_user():time.sleep(3)print("get_user函数执行")return {"user":"current user"}@app.get("/item/{item_id}")
async def get_item(item_id:int):time.sleep(2)print("get_item函数执行")return {"item_id":item_id}if __name__ == "__main__":uvicorn.run("main:app", host="127.0.0.1", port=5050, reload=True)

在这里插入图片描述

2. CORS跨域请求

import uvicorn
from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddlewareapp = FastAPI()app.add_middleware(CORSMiddleware,allow_methods=['GET', 'POST'],allow_headers=['*']
)# @app.middleware("http")
# async def HelloMiddleware(request:Request, call_next):
#     response = await call_next(request)
#     response.headers["Access-Control-Allow-Origin"] = "*"
#     return response@app.get("/hello")
async def get_hello():return {"message": "hello xujie"}if __name__ == "__main__":uvicorn.run("main:app", port=5050, reload=True)

注释:
fastapi框架(测试开发用)差不多就这些了,请求、响应、assert、数据库、中间件、跨域、template、基本上合作开发一套简单自用测试平台已经够用(至少我是这样的),填坑完成,撒花

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

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

相关文章

传神社区|数据集合集第7期|法律NLP数据集合集

自从ChatGPT等大型语言模型(Large Language Model, LLM)出现以来,其类通用人工智能(AGI)能力引发了自然语言处理(NLP)领域的新一轮研究和应用浪潮。尤其是ChatGLM、LLaMA等普通开发者都能运行的…

Sokit(TCP/UDP调试工具)

下载:http://www.winwin7.com/soft/56522.html#xiazai Sokit中文版是一款免费开源的TCP / UDP 测试(调试)工具,它主要可以用于接收和发送TCP/UDP数据包,让你更深的了解网络状况,能够有效地接收、发送、转…

简析漏洞生命周期管理的价值与关键要求

开展全面且持续的漏洞管理工作,对于企业组织改善数字化应用安全状况,降低潜在风险,并保持数字资产的完整性和可信度至关重要。做好漏洞管理并不容易,组织不仅需要拥有健全的漏洞管理策略,同时还要辅以明确定义的漏洞管…

TCP并发服务器多线程

1.创建线程‐‐pthread_create int pthread_create( pthread_t *thread, // 线程 ID 无符号长整型 const pthread_attr_t *attr, // 线程属性, NULL void *(*start_routine)(void *), // 线程处理函数 void *arg); // 线程处理函数 参数: pthrea…

安装Ubuntu24.04服务器版本

Ubuntu系统安装 一.启动安装程序二.执行 Ubuntu Server 安装向导1.选择安装程序语言,通常选择「English」2.设置键盘布局,默认「English US」即可3.选择安装方式 三.配置网络1.按Tab键选择网络接口(例如 ens160),然后按…

2024视频改字祝福 豪车装X系统源码uniapp前端源码

源码介绍 uniapp视频改字祝福 豪车装X系统源码 全开源,只有uniapp前端,API接口需要寻找对应的。 创意无限!AI视频改字祝福,豪车装X系统源码开源,打造个性化祝福视频不再难! 想要为你的朋友或家人送上一份特别的祝福…

如何解决ChromeDriver 126找不到chromedriver.exe问题

引言 在使用Selenium和ChromeDriver进行网页自动化时,ChromeDriver与Chrome浏览器版本不匹配的问题时有发生。最近,许多开发者在使用ChromeDriver 126时遇到了无法找到chromedriver.exe文件的错误。本文将介绍该问题的原因,并提供详细的解决…

JCR一区级 | Matlab实现CPO-Transformer-LSTM多变量回归预测【2024新算法】

JCR一区级 | Matlab实现CPO-Transformer-LSTM多变量回归预测【2024新算法】 目录 JCR一区级 | Matlab实现CPO-Transformer-LSTM多变量回归预测【2024新算法】效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.【JCR一区级】Matlab实现CPO-Transformer-LSTM多变量回归预测…

<数据集>AffectNet表情识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:29752张 标注数量(xml文件个数):29752 标注数量(txt文件个数):29752 标注类别数:7 标注类别名称:[anger,contempt,disgust,fear,happy,neutral,sad,surprise] 序号类…

新手小白的pytorch学习第十弹----多类别分类问题模型以及九、十弹的练习

目录 1 多类别分类模型1.1 创建数据1.2 创建模型1.3 模型传出的数据1.4 损失函数和优化器1.5 训练和测试1.6 衡量模型性能的指标 2 练习Exercise 之前我们已经学习了 二分类问题,二分类就像抛硬币正面和反面,只有两种情况。 这里我们要探讨一个 多类别…

高职国培丨数据分析与数据挖掘课程实施能力提升培训班正式开班

7月15日,由广东机电职业技术学院牵头,广东泰迪智能科技股份有限公司作为合作单位的“高职教师数据分析与数据挖掘课程实施能力提升培训班(高职国培)”正式开班。来自广东省各地36位高校教师参与本次线下师资国培班。 广东机电职业…

HarmonyOS 状态管理(一)

1. HarmonyOS 状态管理 1.1. 说明 官方文档(https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-state-management-V5) 1.1.1. 状态管理(V1稳定版) 状态管理(V1稳定版)提供了多种…

【iOS】——SideTable

SideTable Side Table主要用于存储和管理对象的额外信息,特别是与弱引用相关的数据。Side Table的设计和使用是Objective-C运行时实现弱引用的基础,使得ARC(Automatic Reference Counting)能够正确地处理弱引用的生命周期。 新版…

【系统架构设计 每日一问】四 如何对关系型数据库及NoSql数据库选型

根据不同的业务需求和场景,选择适合的数据库类型至关重要。以下是一个优化后的表格展示,涵盖了管理型系统、大流量系统、日志型系统、搜索型系统、事务型系统、离线计算和实时计算七大类业务系统的数据库选型建议。先明确下NoSQL的分类 NoSQL数据库分类…

大数据学习之sparkstreaming

SparkStreaming idea中初步实现 Spark core: SparkContext 核心数据结构:RDD Spark sql: SparkSession 核心数据结构:DataFrame Spark streaming: StreamingContext 核心数据结构:DStream(底层封装了RDD),遍历出其中的RDD即可进行…

ReadAgent,一款具有要点记忆的人工智能阅读代理

人工智能咨询培训老师叶梓 转载标明出处 现有的大模型(LLMs)在处理长文本时受限于固定的最大上下文长度,并且当输入文本越来越长时,性能往往会下降,即使在没有超出明确上下文窗口的情况下,LLMs 的性能也会随…

中文之美:荷·雅称

文章目录 引言I 荷雅称水宫仙子、六月花神水芝、水芸溪客、水旦芙蕖、菡萏朱华、红蕖风荷、静客II 与荷、莲相关的句子、诗词周敦颐李商隐李重元杨公远孟浩然刘光祖苏轼汪曾祺席慕蓉余光中引言 中文之美,美在诗词歌赋,美在绝句华章,也美在对事物名称的雅致表达。 中文对万物…

GPT-4o mini是什么?

今天,全网都知道 OpenAI 发现货了! GPT-4o mini 取代 GPT 3.5,从此坐上正主之位。 从官网信息来看,OpenAI 最新推出的 GPT-4o mini 重新定义了 AI 成本效益的标准,其性能优于前代模型 GPT-3.5 Turbo,且成本…

ruoyi-cloud-plus

1.X项目初始化 (dromara.org)参考文档! 可以直接参考以上链接!我只是整理我自己需要的部分,方便查看使用。 nacos 服务启动顺序 必须启动基础建设: mysql redis nacos可选启动基础建设: minio(影响文件上传) seata(影响分布式事务 默认开启…

Synopsys:Design Compiler的XG模式和DB模式

相关阅读 Synopsyshttps://blog.csdn.net/weixin_45791458/category_12738116.html?spm1001.2014.3001.5482 很久之前,Design Compiler使用的是DB模式(包括一些其他工具,例如DFT Compiler, Physical Compiler和Power Compiler)&…