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

fastApi笔记04-查询参数和字符串校验

额外校验

使用Query可以对查询参数添加校验

from typing import Unionfrom fastapi import FastAPI, Queryapp = FastAPI()@app.get("/items/")
async def read_items(q: Union[str, None] = Query(default=None, max_length=50)):results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}if q:results.update({"q": q})return results

default:默认值

max_length:最大长度

min_length:最小长度

pattern:正则表达式

声明为必须参数

当使用Query声明一个查询参数为必须参数时,只用不声明默认值就行,也就是default不传

from fastapi import FastAPI, Queryapp = FastAPI()@app.get("/items/")
async def read_items(q: str = Query(min_length=3)):results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}if q:results.update({"q": q})return results

使用省略号(...)声明必填参数

from fastapi import FastAPI, Queryapp = FastAPI()@app.get("/items/")
async def read_items(q: str = Query(default=..., min_length=3)):results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}if q:results.update({"q": q})return results

使用Pydantic中的Required代替省略号

from fastapi import FastAPI, Query
from pydantic import Requiredapp = FastAPI()@app.get("/items/")
async def read_items(q: str = Query(default=Required, min_length=3)):results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}if q:results.update({"q": q})return results

使用None声明必须参数

from typing import Unionfrom fastapi import FastAPI, Queryapp = FastAPI()@app.get("/items/")
async def read_items(q: Union[str, None] = Query(default=..., min_length=3)):results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}if q:results.update({"q": q})return results

声明None是个有效类型,这样将强制客户端传一个值。即使这个值是None

查询参数列表,多个值

使用Query显式地定义查询参数时,还可以声明它去接收一组值,或换句话来说,接收多个值。

例如,要声明一个可在 URL 中出现多次的查询参数

from typing import List, Unionfrom fastapi import FastAPI, Queryapp = FastAPI()@app.get("/items/")
async def read_items(q: Union[List[str], None] = Query(default=None)):query_items = {"q": q}return query_items

http://localhost:8000/items/?q=foo&q=bar

要声明类型为List的查询参数,需要显示使用Query,否则该参数将被当做请求体解析

具有默认值的查询参数列表/多个值

from typing import Listfrom fastapi import FastAPI, Queryapp = FastAPI()@app.get("/items/")
async def read_items(q: List[str] = Query(default=["foo", "bar"])):query_items = {"q": q}return query_items

http://localhost:8000/items/

更多元数据

from typing import Unionfrom fastapi import FastAPI, Queryapp = FastAPI()@app.get("/items/")
async def read_items(q: Union[str, None] = Query(default=None,alias="item-query",title="Query string143242542",description="Query string for the items to search in the database that have a good match",min_length=3,max_length=50,pattern="^fixedquery$",deprecated=True,),
):results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}if q:results.update({"q": q})return results

 

  • alias:参数别名
  • title:不知道啥效果,没试出来
  • description:自动文档上的参数描述
  • deprecated:True时自动文档提示弃用参数
http://www.lryc.cn/news/303086.html

相关文章:

  • 笔记 记录
  • 相机图像质量研究(38)常见问题总结:编解码对成像的影响--呼吸效应
  • MQTT协议-ISO标准下基于发布/订阅范式的消息协议
  • 手动实现new操作符
  • 【flutter】环境安装
  • ROUGE-L和SPICE
  • vue3组件通信方式汇总
  • 备份服务器数据的重要
  • 基于shp数据制作3DTiles建筑白膜
  • SpringBootWeb学习笔记——12万字详细总结!
  • Code Composer Studio (CCS) - 文件比较
  • 【GIT学习】仓库过大的清理办法
  • [office] excel如何设置图片大小 #其他#其他
  • 【动态规划专栏】专题二:路径问题--------4.下降路径最小和
  • LabVIEW读取excel日期
  • K8s ingress-nginx根据请求目录不同将请求转发到不同应用
  • 【Linux】git操作 - gitee
  • EXCEL使用VBA一键批量转换成PDF
  • 【大厂AI课学习笔记】【2.2机器学习开发任务实例】(8)模型训练
  • 【Flink网络通讯(一)】Flink RPC框架的整体设计
  • 【Flink】FlinkSQL读取hive数据(批量)
  • list链表
  • <网络安全>《42 网络攻防专业课<第八课 - SQL注入漏洞攻击与防范>》
  • 微服务开发工具及环境搭建
  • HTML学习笔记——08:表单<form>
  • 什么是跨端,常用的跨端技术
  • 【书生·浦语大模型实战营】第6节:OpenCompass 大模型评测(笔记版)
  • 为什么需要写Java单元测试总结
  • Gin框架: 控制器, 中间件的分层设计案例
  • 日常遇到Maven出现依赖版本/缓存问题通用思路。