随笔 - 214  文章 - 12  评论 - 40  阅读 - 38万

FastAPI 基础学习(八) 参数附加信息 (一)

作者:麦克煎蛋   出处:https://www.cnblogs.com/mazhiyong/ 转载请保留这段声明,谢谢!

 

FastAPI支持为路径参数、请求参数添加附加信息,起到辅助说明或辅助校验的作用。

 

一、请求参数附加信息

对请求参数附加信息的支持,FastAPI通过Query模块来实现。

1、导入Query模块

from fastapi import Query

2、基于Query模块声明缺省值

可选参数声明

q: str = Query(None)  # 等同于  q: str = None

缺省值参数声明

q: str = Query("query")  # 等同于  q: str = "query"

必选参数声明

q: str = Query(...)  # 等同于 q: str

3、添加附加信息

q: str = Query(None, max_length=50)  # 限制q的最大长度不超过50

主要用于字符串参数的附加信息:

min_length:最小长度
max_length:最大长度
regex:正则表达式

主要用于自动化文档的附加信息:

title:参数标题
description:参数描述信息
deprecated:表示参数即将过期

特殊附加信息:

alias:参数别名

例如:

http://127.0.0.1:8000/items/?item-query=foobaritems

item-query并不是一个合法的Python变量名称,Python内部会对它进行转换,为了匹配到正确的参数变量我们就需要使用参数别名。

 

综合示例如下:

复制代码
from fastapi import FastAPI, Query

app = FastAPI()


@app.get("/items/")
async def read_items(
    q: str = Query(
        None,
        alias="item-query",
        title="Query string",
        description="Query string for the items to search in the database that have a good match",
        min_length=3,
        max_length=50,
        regex="^fixedquery$",
        deprecated=True
    )
):
    results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
    if q:
        results.update({"q": q})
    return results
复制代码

二、请求参数列表

FastAPI基于Query模块可以支持请求参数列表,例如请求参数q可以在URL中出现多次:

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

对应代码实现如下:

复制代码
from typing import List
from fastapi import FastAPI, Query

app = FastAPI()


@app.get("/items/")
async def read_items(q: List[str] = Query(None)):
    query_items = {"q": q}
    return query_items
复制代码

返回结果内容为:

{
  "q": [
    "foo",
    "bar"
  ]
}

 

当然这里Query也支持请求参数列表的缺省值设置。

复制代码
from typing import List
from fastapi import FastAPI, Query

app = FastAPI()


@app.get("/items/")
async def read_items(q: List[str] = Query(["foo", "bar"])):
    query_items = {"q": q}
    return query_items
复制代码

 

我们也可以用list代替List[str],但这样的话FastAPI就无法校验列表内容了。

复制代码
from fastapi import FastAPI, Query

app = FastAPI()


@app.get("/items/")
async def read_items(q: list = Query(None)):
    query_items = {"q": q}
    return query_items
复制代码

 

posted on   麦克煎蛋  阅读(2917)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示