当前位置: 首页 > news >正文

开源模型应用落地-FastAPI-助力模型交互-进阶篇-RequestDataclasses(三)

一、前言

   FastAPI 的高级用法可以为开发人员带来许多好处。它能帮助实现更复杂的路由逻辑和参数处理,使应用程序能够处理各种不同的请求场景,提高应用程序的灵活性和可扩展性。

    在数据验证和转换方面,高级用法提供了更精细和准确的控制,确保输入数据的质量和安全性。它还能更高效地处理异步操作,提升应用程序的性能和响应速度,特别是在处理大量并发请求时优势明显。

    此外,高级用法还有助于更好地整合数据库操作、实现数据的持久化和查询优化,以及实现更严格的认证和授权机制,保护应用程序的敏感数据和功能。总之,掌握 FastAPI 的高级用法可以帮助开发人员构建出功能更强大、性能更卓越、安全可靠的 Web 应用程序。

    本篇学习如何在FastAPI中直接使用Request对象和如何使用数据类Dataclasses。


二、术语

2.1. Request对象

    是用于处理 HTTP 请求的核心对象,它提供了许多功能和属性,以便更灵活地处理和访问客户端发送的请求信息。例如:获取客户端的IP地址/主机,可以通过访问Request对象来实现。

2.2. middleware函数

    middleware函数(中间件)它在每个请求被特定的路径操作处理之前,以及在每个响应返回之前工作。可以用于实现多种通用功能,例如身份验证、日志记录、错误处理、请求处理、缓存等。其主要作用是在请求和响应的处理过程中添加额外的处理逻辑,而无需在每个具体的路由处理函数中重复编写这些逻辑。

    一般在碰到以下需求场景时,可以考虑使用中间件来实现:

  1. 身份验证:验证请求的身份,如检查 JWT token 或使用 OAuth2 进行验证;
  2. 日志记录:记录请求和响应的日志,包括请求方法、URL、响应状态码等信息;
  3. 错误处理:处理应用程序中的异常情况,捕获异常并返回自定义的错误响应;
  4. 请求处理:对请求进行处理,例如解析请求参数、验证请求数据等;
  5. 缓存:在中间件中检查缓存中是否存在请求的响应,如果存在则直接返回缓存的响应。

2.3. dataclasses

    表示类和函数的一种轻量级数据定义方式。通过 @dataclass 装饰的数据类具有以下特点和优势:

  1. 自动生成方法:无需手动编写繁琐的 __init____repr__ 等方法,装饰器会自动添加这些方法。
  2. 默认值和类型提示:可以为属性设置默认值,并添加类型提示,提高代码的可读性和可维护性。
  3. 不可变实例:通过设置 frozen=True,可以创建不可变的实例,增加代码的稳定性,防止对象被意外修改。
  4. 类型检查和验证:支持类型检查和验证,可使用 field 函数添加对属性的验证规则。
  5. 自动生成合理的 __repr__ 和 __eq__ 方法:方便比较和输出对象。
  6. 继承和默认值工厂:支持继承和默认值工厂,使复杂的类层次结构定义更简单。
  7. 可转换为字典或元组:提供了 asdict 和 astuple 函数,方便将数据类实例转换为字典或元组。

三、前置条件

3.1. 创建虚拟环境&安装依赖

conda create -n fastapi_test python=3.10
conda activate fastapi_test
pip install fastapi uvicorn

四、技术实现

4.1. 使用Request对象实现黑名单访问拦截

# -*- coding: utf-8 -*-
import uvicorn
from fastapi import FastAPI, Request, HTTPException
from starlette import statusapp = FastAPI()black_list = ['192.168.102.88']@app.middleware("http")
async def my_middleware(request: Request, call_next):client_host = request.client.hostprint(f"client_host: {client_host}")if client_host in black_list:raise HTTPException(status_code=status.HTTP_403_FORBIDDEN,detail="Prohibit access")else:response = await call_next(request)return response@app.get("/items/")
async def read_items():return [{"item_id": "Foo"}]if __name__ == '__main__':uvicorn.run(app, host='0.0.0.0',port=7777)

调用结果:

正常访问,未命中黑名单:

非法访问,命中黑名单:

4.2. 使用dataclasses

# -*- coding: utf-8 -*-
import uvicorn
from fastapi import FastAPI
from dataclasses import dataclass
from typing import Unionapp = FastAPI()@dataclass
class Item:name: strprice: floatdescription: Union[str, None] = Nonetax: Union[float, None] = None@app.post("/items/")
async def read_items(item: Item):print(f'item: {item}')return itemif __name__ == '__main__':uvicorn.run(app, host='0.0.0.0',port=7777)

调用结果:

使用pycharm的Http Request功能进行测试

选择POST Text Body,自动创建请求模版

修改IP和端口,填写请求参数

执行并观察结果


五、附带说明

5.1.不使用dataclasses的示例

# -*- coding: utf-8 -*-
import uvicorn
from fastapi import FastAPI
from typing import Unionapp = FastAPI()@app.post("/items1")
async def read_items(name: str,price: float,description: Union[str, None],tax: Union[float, None] ):item = Item(name= name,price=price,description=description,tax=tax)return itemif __name__ == '__main__':uvicorn.run(app, host='0.0.0.0',port=7777)

调用结果:

使用pycharm的Http Request功能进行测试

使用dataclasses vs 不使用dataclasses说明:

  1. 使用dataclasses,代码更加简洁、易读,并且不易出错
  2. 使用dataclasses,使得代码在不同的上下文中更易于使用和扩展
  3. 使用dataclasses,增强了代码的可读性和可维护性。

相关文章:

开源模型应用落地-FastAPI-助力模型交互-进阶篇-RequestDataclasses(三)

一、前言 FastAPI 的高级用法可以为开发人员带来许多好处。它能帮助实现更复杂的路由逻辑和参数处理,使应用程序能够处理各种不同的请求场景,提高应用程序的灵活性和可扩展性。 在数据验证和转换方面,高级用法提供了更精细和准确的控制&#…...

2024.7.20 暑期训练记录(6)

CF 1391D - 505(思维状压dp) 首先简化问题,发现一个矩阵如果要满足条件,那它其中的每一个 2 2 2\times 2 22 的小矩阵都要满足条件,于是很容易发现 4 4 4\times4 44 的矩阵是一定不满足条件的(因为是…...

firefly rk3288 ubuntu23.10 网卡名为end0 改为eth0

1、内核源码修改u-boot/include/env_default.h文件第32行的bootargs参数,修改后: "bootargs net.ifrenames0 " CONFIG_BOOTARGS "\0"2、修改rootfs里的lib/systemd/network/99-default.link文件: [M…...

git使用总结

概述 简介 Git是一种代码托管技术,很多代码托管平台也是基于Git来实现的。 Git可以帮我们做到很多的事情,比如代码的版本控制,分支管理等。 网址 git官网:https://git-scm.com/ 版本控制系统【VCS】 可以完整保存项目的快照&#…...

使用多进程和多线程实现服务器并发【C语言实现】

在TCP通信过程中,服务器端启动之后可以同时和多个客户端建立连接,并进行网络通信,但是在一个单进程的服务器的时候,提供的服务器代码却不能完成这样的需求,先简单的看一下之前的服务器代码的处理思路,再来分…...

深入理解Linux网络(三):TCP对象创建

深入理解Linux网络(三):TCP对象创建 TCP对象创建inet_createsock_init_data TCP对象创建 常见的三句TCP编程: int main() {int sk socket(AF_INET, SOCK_STREAM, 0);connect(sk, ...)recv(sk, ...) }简单的两三⾏代码&#xff…...

windows server——4.安装DNS管理器

windows server——4.安装DNS管理器 一、准备二、安装DNS管理器1.打开服务器管理器2.添加dns服务器 三、验证 一、准备 windows server电脑(已安装IIS) 静态网站数据包 二、安装DNS管理器 1.打开服务器管理器 2.添加dns服务器 点击管理——添加角色和…...

速盾:金融行业服务器如何避免DDoS攻击?

随着金融行业的数字化和网络化进程加快,服务器成为金融机构不可或缺的一部分。然而,服务器面临的安全威胁也在不断增加,其中之一就是DDoS攻击。DDoS(Distributed Denial of Service)攻击是通过向目标服务器发送大量无法…...

谷粒商城实战笔记-38-前端基础-Vue-指令-单向绑定双向绑定

文章目录 一,插值表达式注意事项1:不适合复杂的逻辑处理注意事项2:插值表达式支持文本拼接注意事项3:插值表达式只能在标签体中 二,v-html和v-textv-textv-html区别总结:最佳实践 三,v-model复选…...

MyPostMan 迭代文档管理、自动化接口闭环测试工具(自动化测试篇)

MyPostMan 是一款类似 PostMan 的接口请求软件,按照 项目(微服务)、目录来管理我们的接口,基于迭代来管理我们的接口文档,文档可以导出和通过 url 实时分享,按照迭代编写自动化测试用例,在不同环…...

https和http有哪些区别?

在今天的互联网世界中,我们经常听到关于HTTPS和HTTP的术语。它们都是超文本传输协议(HTTP)的变种,但它们之间存在着重要的区别。本篇博客将深入探讨HTTPS与HTTP之间的差异以及为什么HTTPS在现代网络中变得如此重要。 目录 1. HT…...

Bubbliiiing 的 Retinaface rknn python推理分析

Bubbliiiing 的 Retinaface rknn python推理分析 项目说明 使用的是Bubbliiiing的深度学习教程-Pytorch 搭建自己的Retinaface人脸检测平台的模型,下面是项目的Bubbliiiing视频讲解地址以及源码地址和博客地址; 作者的项目讲解视频:https:…...

Web前端-Web开发HTML基础8-nav

一. 基础 1. 写一个导航标签,里面是两个超链接,分别指向https://baidu.com和https://huawei.com/cn; 2. 写一个导航标签,里面是三个超链接,分别指向https://baidu.com、https://huawei.com/cn和https://www.nowcoder.c…...

如何建设和维护数据仓库:深入指南

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: V: LAF20151116 进行更多交流学习 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&#xff…...

海思arm-hisiv400-linux-gcc 交叉编译rsyslog 记录心得

需要编译rsyslog,参考海思3536平台上rsyslog交叉编译、使用-CSDN博客和rsyslog移植(亲测成功)_rsyslog交叉编译-CSDN博客 首先下载了要用到的一些库的源码,先交叉编译这些库 原来是在centos6上交叉编译的,结果编译时报缺少软件要…...

IDEA工具中Java语言写小工具遇到的问题

一:读取excel时遇到 org/apache/poi/ss/usermodel/WorkbookProvider 解决办法: 在pom.xml中把poi的引文包放在最前面即可(目前就算放在最后面也不报错了,不知道为啥) 二:本地maven打包时,没有…...

2-38 基于matlab的蚁群算法优化无人机uav巡检

基于matlab的蚁群算法优化无人机uav巡检,巡检位置坐标可根据需求设置,从基地出发,返回基地,使得路径最小。可设置蚁群数量,信息素系数。输出最佳路线长度。程序已调通,可直接运行。 2-38 蚁群算法优化无人…...

解决selenium打印保存为PDF时图片未加载成功的问题

使用selenium打印网页时,如果程序运行很快的话,可能会导致图片没有加载成功即进行了保存,出现这个问题最初的思考是在执行打印任务时使用js进行强制等待,后发现实现效果并不好。在加载页面时使用自动下滑的方式将网页拉到底&#…...

如何将PDF转换成可以直接编辑的CAD图纸?

PDF图纸是为了让用户更好的阅览CAD文件,但是,当我们想要对其进行编辑的时候,PDF图纸就是一个麻烦了。那么PDF转换成CAD后可以编辑吗?如何将PDF转换成可以直接编辑的CAD图纸呢?本篇给你答案。 1、启动迅捷CAD编辑器&…...

【STM32】理解时钟树(图示分析)

文章目录 时钟系统什么是时钟时钟树简化图示类比示例时钟树详解时钟源系统时钟配置各总线时钟外设时钟 时钟系统 什么是时钟 时钟在电子和计算机系统中指的是生成周期性信号的电路或设备,这种周期性信号用于同步系统内的各种操作。时钟信号通常是方波,…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage)&#xff1a…...

Cursor实现用excel数据填充word模版的方法

cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...