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

FastAPI —— 请求参数验证

1.hello world 给后端船数据

hello world 接口给后端传 COVID-19 感染数据_高性能 FastAPI 框架入门精讲-慕课网

#!/usr/bin/python3
# -*- coding:utf-8 -*-
# __author__ = '__Jack__'from typing import Optionalfrom fastapi import FastAPI
from pydantic import BaseModelapp = FastAPI()  # 这里不一定是app,名字随意class CityInfo(BaseModel):province: strcountry: stris_affected: Optional[bool] = None  # 与bool的区别是可以不传,默认是null# @app.get('/')
# def hello_world():
#     return {'hello': 'world'}
#
#
# @app.get('/city/{city}')
# def result(city: str, query_string: Optional[str] = None):
#     return {'city': city, 'query_string': query_string}
#
#
# @app.put('/city/{city}')
# def result(city: str, city_info: CityInfo):
#     return {'city': city, 'country': city_info.country, 'is_affected': city_info.is_affected}
#@app.get('/')
async def hello_world():return {'hello': 'world'}@app.get('/city/{city}')
async def result(city: str, query_string: Optional[str] = None):return {'city': city, 'query_string': query_string}@app.put('/city/{city}')
async def result(city: str, city_info: CityInfo):return {'city': city, 'country': city_info.country, 'is_affected': city_info.is_affected}# 启动命令:uvicorn hello_world:app --reload

2.swaggerUI界面

FastAPI 的 API 交互文档 - Swagger UI 和 ReDoc_高性能 FastAPI 框架入门精讲-慕课网

讲的是swagger中的docs和redoc的作用,各关键地方的作用用法

3.路径参数和数据的解析、验证

路径参数和数据的解析、验证_高性能 FastAPI 框架入门精讲-慕课网

4.查询参数和数据的解析、验证

查询参数和数据的解析、验证_高性能 FastAPI 框架入门精讲-慕课网

5.请求体以及混合参数

请求体以及混合参数_高性能 FastAPI 框架入门精讲-慕课网

6.如何定义数据格式嵌套的请求体

如何定义数据格式嵌套的请求体?_高性能 FastAPI 框架入门精讲-慕课网

7.如何设置Cookie和Header参数

如何设置 Cookie 和 Header 参数?_高性能 FastAPI 框架入门精讲-慕课网

#!/usr/bin/python3
# -*- coding:utf-8 -*-
# __author__ = '__Jack__'from datetime import date
from enum import Enum
from typing import Optional, Listfrom fastapi import APIRouter, Query, Path, Body, Cookie, Header
from pydantic import BaseModel, Fieldapp03 = APIRouter()"""Path Parameters and Number Validations 路径参数和数字验证"""@app03.get("/path/parameters")
def path_params01():return {"message": "This is a message"}@app03.get("/path/{parameters}")  # 函数的顺序就是路由的顺序
def path_prams02(parameters: str):return {"message": parameters}class CityName(str, Enum):Beijing = "Beijing China"Shanghai = "Shanghai China"@app03.get("/enum/{city}")  # 枚举类型的参数
async def latest(city: CityName):if city == CityName.Shanghai:return {"city_name": city, "confirmed": 1492, "death": 7}if city == CityName.Beijing:return {"city_name": city, "confirmed": 971, "death": 9}return {"city_name": city, "latest": "unknown"}@app03.get("/files/{file_path:path}")  # 通过path parameters传递文件路径
def filepath(file_path: str):return f"The file path is {file_path}"@app03.get("/path_/{num}")
def path_params_validate(num: int = Path(..., title="Your Number", description="不可描述", ge=1, le=10),
):return num"""Query Parameters and String Validations 查询参数和字符串验证"""@app03.get("/query")
def page_limit(page: int = 1, limit: Optional[int] = None):  # 给了默认值就是选填的参数,没给默认值就是必填参数if limit:return {"page": page, "limit": limit}return {"page": page}@app03.get("/query/bool/conversion")  # bool类型转换:yes on 1 True true会转换成true, 其它为false
def type_conversion(param: bool = False):return param@app03.get("/query/validations")  # 长度+正则表达式验证,比如长度8-16位,以a开头。其它校验方法看Query类的源码
def query_params_validate(value: str = Query(..., min_length=8, max_length=16, regex="^a"),  # ...换成None就变成选填的参数values: List[str] = Query(["v1", "v2"], alias="alias_name")
):  # 多个查询参数的列表。参数别名return value, values"""Request Body and Fields 请求体和字段"""class CityInfo(BaseModel):name: str = Field(..., example="Beijing")  # example是注解的作用,值不会被验证country: strcountry_code: str = None  # 给一个默认值country_population: int = Field(default=800, title="人口数量", description="国家的人口数量", ge=800)class Config:schema_extra = {"example": {"name": "Shanghai","country": "China","country_code": "CN","country_population": 1400000000,}}@app03.post("/request_body/city")
def city_info(city: CityInfo):print(city.name, city.country)  # 当在IDE中输入city.的时候,属性会自动弹出return city.dict()"""Request Body + Path parameters + Query parameters 多参数混合"""@app03.put("/request_body/city/{name}")
def mix_city_info(name: str,city01: CityInfo,city02: CityInfo,  # Body可以是多个的confirmed: int = Query(ge=0, description="确诊数", default=0),death: int = Query(ge=0, description="死亡数", default=0),
):if name == "Shanghai":return {"Shanghai": {"confirmed": confirmed, "death": death}}return city01.dict(), city02.dict()@app03.put("/request_body/multiple/parameters")
def body_multiple_parameters(city: CityInfo = Body(..., embed=True),  # 当只有一个Body参数的时候,embed=True表示请求体参数嵌套。多个Body参数默认就是嵌套的confirmed: int = Query(ge=0, description="确诊数", default=0),death: int = Query(ge=0, description="死亡数", default=0),
):print(f"{city.name} 确诊数:{confirmed} 死亡数:{death}")return city.dict()"""Request Body - Nested Models 数据格式嵌套的请求体"""class Data(BaseModel):city: List[CityInfo] = None  # 这里就是定义数据格式嵌套的请求体date: date  # 额外的数据类型,还有uuid datetime bytes frozenset等,参考:https://fastapi.tiangolo.com/tutorial/extra-data-types/confirmed: int = Field(ge=0, description="确诊数", default=0)deaths: int = Field(ge=0, description="死亡数", default=0)recovered: int = Field(ge=0, description="痊愈数", default=0)@app03.put("/request_body/nested")
def nested_models(data: Data):return data"""Cookie 和 Header 参数"""@app03.get("/cookie")  # 效果只能用Postman测试
def cookie(cookie_id: Optional[str] = Cookie(None)):  # 定义Cookie参数需要使用Cookie类,否则就是查询参数return {"cookie_id": cookie_id}@app03.get("/header")
def header(user_agent: Optional[str] = Header(None, convert_underscores=True), x_token: List[str] = Header(None)):"""有些HTTP代理和服务器是不允许在请求头中带有下划线的,所以Header提供convert_underscores属性让设置:param user_agent: convert_underscores=True 会把 user_agent 变成 user-agent:param x_token: x_token是包含多个值的列表:return:"""return {"User-Agent": user_agent, "x_token": x_token}

相关文章:

FastAPI —— 请求参数验证

1.hello world 给后端船数据 hello world 接口给后端传 COVID-19 感染数据_高性能 FastAPI 框架入门精讲-慕课网 #!/usr/bin/python3 # -*- coding:utf-8 -*- # __author__ __Jack__from typing import Optionalfrom fastapi import FastAPI from pydantic import BaseModel…...

第七篇: BigQuery中的复杂SQL查询

BigQuery中的复杂SQL查询 背景与目标 在数据分析中,我们通常需要从多个数据源中获取信息,以便进行深入的分析。这时,BigQuery提供的JOIN、UNION和子查询等复杂SQL语句非常实用。本文将以Google BigQuery的公共数据集为例,介绍如何…...

【SQL实验】高级查询(难点.三)含附加数据库操作

完整代码在文章末尾【代码是自己的解答,并非标准答案,也有可能写错,文中可能会有不准确或待完善之处,恳请各位读者不吝批评指正,共同促进学习交流】 将素材中的“学生管理”数据库附加到SQL SERVER中,完成以…...

qt QFileSystemModel详解

1、概述 QFileSystemModel是Qt框架中的一个关键类,它继承自QAbstractItemModel,专门用于在Qt应用程序中展示文件系统的数据。这个模型提供了一个方便的接口,使得开发者可以轻松地在应用程序中集成文件和目录的树形结构,并通过视图…...

element plus中修改el-table的样式

文章目录 前情提要相关环境package.jsonvue代码结果 方式一直接看代码 方式二直接看代码 前情提要 因为项目中用到el-table的时候,需要将el-table表格的样式进行修改,将整个表格的背景颜色从白色变成透明,使得表格变得透明之后,展…...

深入理解封装与接口:Java程序设计的核心思想与最佳实践

目录 一、封装的优点 二、接口与默认方法 三、总结 在面向对象编程(OOP)中,封装(Encapsulation)是一个核心概念,Java对其进行了良好的支持。封装不仅有助于提高代码的安全性,还能够增强代码的…...

linux 下调试 mpu6050 三轴加速度

供自己备忘; 1. 参考资料: b 站视频 https://www.bilibili.com/video/BV1cL4y1x7FA/?spm_id_from333.337.search-card.all.click&vd_sourced7a07b8689c9e646f0214227c06f304c csdn 其它博客 https://blog.csdn.net/qq_65198598/article/detail…...

C语言心型代码解析

方法一 心型极坐标方程 爱心代码你真的理解吗 笛卡尔的心型公式&#xff1a; for (y 1.5; y > -1.5; y - 0.1) for (x -1.5; x < 1.5; x 0.05) 代码里面用了二个for循环&#xff0c;第一个代表y轴&#xff0c;第二个代表x轴 二个增加的单位不同&#xff0c;能使得…...

【LeetCode】【算法】647. 回文子串

LeetCode 647.回文子串 题目描述 给你一个字符串s&#xff0c;请你统计并返回这个字符串中回文子串的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串是字符串中的由连续字符组成的一个序列。 思路 思路&#xff1a;中心拓展法 中心拓展法的意思是说&#xf…...

介绍6种常见的基于知识图谱推荐算法的类型和各自的优缺点

基于知识图谱的推荐算法有多种&#xff0c;每种算法各有其优点和缺点。下面是一些常见的基于知识图谱的推荐算法及其分析&#xff1a; 基于邻域的协同过滤&#xff08;Collaborative Filtering&#xff09; 描述&#xff1a;通过分析用户之间的相似性或项目之间的相似性来进行…...

使用python拟合二元曲线系数

python import numpy as np import pandas as pd注&#xff1a; xlsx 表格中 有 压力P&#xff0c;流量值Q&#xff0c;温度值 K&#xff1b; df pd.read_excel("./i100-10000slm.xlsx",usecols[p1,molboxQm,Dek]) #print(df.head())#column_data df[p1] # 获取行数…...

go 集成viper 配置管理

安装viper go get github.com/spf13/viper 配置文件 读取配置文件 package confimport ("fmt""github.com/spf13/viper" )func Properties() {viper.SetConfigName("application")viper.SetConfigType("yml")viper.AddConfigPath(&q…...

Java:数据结构-再谈String类

字符串常量池 首先我们来思考这段代码&#xff0c;为什么运行结果一个是true&#xff0c;一个是false呢&#xff1f; public class Test {public static void main(String[] args) {String s1"123";String s2"123";String s3new String("555")…...

斗破QT编程入门系列之二:GUI应用程序设计基础:UI文件(四星斗师)

斗破Qt目录&#xff1a; 斗破Qt编程入门系列之前言&#xff1a;认识Qt&#xff1a;Qt的获取与安装&#xff08;四星斗师&#xff09; 斗破QT编程入门系列之一&#xff1a;认识Qt&#xff1a;初步使用&#xff08;四星斗师&#xff09; 斗破QT编程入门系列之二&#xff1a;认识…...

微服务实战系列之玩转Docker(十八)

导览 前言Q&#xff1a;如何保障容器云环境下etcd集群的数据安全一、安全机制身份认证必学必看1. 启动参数2. 授权命令3. 开启认证 二、应用实践1. 访问容器2. 查看认证是否开启3. 查看是否已创建用户4. 创建用户5. 开启认证6. 验证是否开启7. 验证数据 结语系列回顾 前言 etc…...

Javascript 获取设备信息 工具

JS获取设备信息(操作系统信息、地理位置、UUID、横竖屏状态、设备类型、网络状态、浏览器信息、生成浏览器指纹、日期、生肖、周几等) Get Device Info Online GitHub - skillnull/DeviceJs: JS获取设备信息(操作系统信息、地理位置、UUID、横竖屏状态、设备类型、网络状态、浏…...

基于开源 AI 智能名片、S2B2C 商城小程序的用户获取成本优化分析

摘要&#xff1a;本文围绕用户获取成本&#xff08;CAC&#xff09;这一关键指标展开深入剖析&#xff0c;详细阐述其计算方式&#xff0c;并紧密结合开源 AI 智能名片与 S2B2C 商城小程序的独特性质&#xff0c;从多个维度探讨如何通过挖掘新的获客渠道、巧妙运用私域流量池等…...

仿真APP助力汽车零部件厂商打造核心竞争力

汽车零部件是汽车工业的基石&#xff0c;是构成车辆的基础元素。一辆汽车通常由上万件零部件组成&#xff0c;包括发动机系统、传动系统、制动系统、电子控制系统等&#xff0c;它们共同确保了汽车的安全、可靠性及高效运行。 在汽车产业快速发展的今天&#xff0c;汽车零部件…...

vue实现websocket实时短消息通知

1、原理 websocket就是通过服务器向客户端推送消息&#xff0c;客户端也可以主动向服务器发送消息&#xff0c;是真正的双向平等对话&#xff0c;是一种长连接&#xff0c;只需要通过一次请求进行初始化。 2、事件 onopen: 客户端和服务器建立连接后触发&#xff0c;被称为客…...

tinymce扩展功能:1、行高、段落间距、格式刷;2、视频上传进度条;3、对复制的图片设置尺寸

tinymce扩展功能&#xff1a;1、行高、段落间距、格式刷&#xff1b;2、视频上传进度条&#xff1b;3、对复制的图片设置尺寸 一、需求描述二、行高、段落间距、格式刷插件三、实现视频上传的进度条、对复制的图片设置尺寸 一、需求描述 使用技术&#xff1a; vue2 tinymce5.…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...