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

FastAPI 基础学习(五) 请求参数

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

 

一、请求参数

复制代码
from fastapi import FastAPI

app = FastAPI()

fake_items_db = [{"item_name": "Foo"}, {"item_name": "Bar"}, {"item_name": "Baz"}]

@app.get("/items/")
async def read_item(skip: int = 0, limit: int = 10):
    return fake_items_db[skip : skip + limit]
复制代码

如上述,如果函数里的参数不是路径参数的一部分,那么这样的参数就自动被解释为请求参数

 

请求参数就是URL中问号('?')后面以'&'间隔开的键值对,它们是URL的一部分,并且参数类型都是字符串类型。

http://127.0.0.1:8000/items/?skip=0&limit=10

在上面的这个URL中,请求参数分别是:

skip:值是0

limit:值是10

 

FastAPI中所有适用于路径参数的功能也同样适用于请求参数,例如:

  • 编辑器支持
  • 数据自动解析
  • 数据自动校验
  • 自动化文档

二、请求参数缺省值

请求参数在URL路径中并不是固定不变的,它们是可选的,并且也可以有缺省值。

复制代码
from fastapi import FastAPI

app = FastAPI()

fake_items_db = [{"item_name": "Foo"}, {"item_name": "Bar"}, {"item_name": "Baz"}]

@app.get("/items/")
async def read_item(skip: int = 0, limit: int = 10):
    return fake_items_db[skip : skip + limit]
复制代码

在这个例子中,skip和limit都是有缺省值的。因此,下面URL的请求是等同的:

http://127.0.0.1:8000/items/

等同于

http://127.0.0.1:8000/items/?skip=0&limit=10

但如果你访问:

http://127.0.0.1:8000/items/?skip=20

那么实际的请求参数就是:

skip=20
limit=10

三、可选请求参数

我们可以声明请求参数是可选的,只要设置参数的缺省值为None

复制代码
from fastapi import FastAPI

app = FastAPI()


@app.get("/items/{item_id}")
async def read_item(item_id: str, q: str = None):
    if q:
        return {"item_id": item_id, "q": q}
    return {"item_id": item_id}
复制代码

在这个例子中,参数q就是可选的,缺省为None。

同时在这个例子中,我们可以注意到,FastAPI可以非常智能的识别参数种类,这里参数item_id是一个路径参数,而参数q是一个请求参数。

四、多路径参数、多请求参数

你可以同时声明多个路径参数、多个请求参数,并且不用考虑声明顺序。FastAPI可以准确无误的识别参数类型。

复制代码
from fastapi import FastAPI

app = FastAPI()


@app.get("/users/{user_id}/items/{item_id}")
async def read_user_item(
    user_id: int, item_id: str, q: str = None, short: bool = False
):
    item = {"item_id": item_id, "owner_id": user_id}
    if q:
        item.update({"q": q})
    if not short:
        item.update(
            {"description": "This is an amazing item that has a long description"}
        )
    return item
复制代码

五、必选请求参数

如果一个请求参数没有被设置任何缺省值(包括None),那么它就是必选的。

复制代码
from fastapi import FastAPI

app = FastAPI()


@app.get("/items/{item_id}")
async def read_user_item(item_id: str, needy: str):
    item = {"item_id": item_id, "needy": needy}
    return item
复制代码

如果我们没有携带请求参数needy,而是直接访问:

http://127.0.0.1:8000/items/foo-item

那么我们就会看到如下的错误信息:

复制代码
{
    "detail": [
        {
            "loc": [
                "query",
                "needy"
            ],
            "msg": "field required",
            "type": "value_error.missing"
        }
    ]
}
复制代码

 

当然了,我们也可以声明有的参数是必选的,有的参数是有缺省值的,而有的参数是完全可选的。

复制代码
from fastapi import FastAPI

app = FastAPI()


@app.get("/items/{item_id}")
async def read_user_item(item_id: str, needy: str, skip: int = 0, limit: int = None):
    item = {"item_id": item_id, "needy": needy, "skip": skip, "limit": limit}
    return item
复制代码

在这个例子中的请求参数中,needy是必选的,skip是有缺省值的,而limit是可选的。

 

posted on   麦克煎蛋  阅读(6412)  评论(1编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· 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

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