python FastAPI中的可选查询参数

xbp102n0  于 2023-06-28  发布在  Python
关注(0)|答案(4)|浏览(151)

我不理解FastAPI中的可选查询参数。它与默认值为None的默认查询参数有何不同?
在下面的示例中,arg2是一个可选的查询参数,如上面的链接所述,arg1arg2有什么区别?

@app.get("/info/")
async def info(arg1: int = None, arg2: int | None = None):
    return {"arg1": arg1, "arg2": arg2}
guicsvcw

guicsvcw1#

这个is covered in the reference manual,虽然只是一个小说明:

async def read_items(q: Optional[str] = None):

FastAPI将知道q的值不是必需的,因为默认值= None。
FastAPI不使用Optional[str]中的Optional,但它允许编辑器为您提供更好的支持和检测错误。
Optional[str]str | None pre 3.10中的其他读卡器相同)
由于 * 编辑器 * 可能不知道FastAPI填充和使用参数的上下文,因此当参数未标记为Optional时,它可能无法理解函数的实际签名。你可能会或可能不会关心这个区别。

wnavrhmk

wnavrhmk2#

除了@MatsLindh的答案,你也可以使用fastapi.Query类和default参数集。
例如:

async def get_companies(company_id: int = Query(default=None, alias="id"), limit: int = Query(default=15), page: int = Query(default=1)):

定义了一个函数get_companies,,带有一个可选的company_id(在请求参数中解析为id),一个可选的limit,以及一个可选的page

bfnvny8b

bfnvny8b3#

Python 3.10之前,是:

from typing import Union

from fastapi import FastAPI

app = FastAPI()

@app.get("/items/{item_id}")
async def read_item(item_id: str, q: Union[str, None] = None):
    if q:
        return {"item_id": item_id, "q": q}
    return {"item_id": item_id}

referencia https://fastapi.tiangolo.com/tutorial/query-params/#optional-parameters

vs91vp4v

vs91vp4v4#

这取决于你如何看待它,但我的哲学是:
可选参数是包括查询参数的更大的集合。
也就是说,查询参数采用作为值的输入,而可选参数是可以没有值的查询参数(即,可选参数是可选参数)。无)。

相关问题