FastAPI 中的可选查询参数

发布于 2025-01-10 04:45:38 字数 543 浏览 1 评论 0原文

我不明白 FastAPI 中的可选查询参数。它与默认值为 默认查询参数有何不同没有?

在下面的示例中,arg1arg2 之间有什么区别,其中 arg2 被设置为可选查询参数(如上面链接中所述)?

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

I don't understand optional query parameters in FastAPI. How is it different from default query parameters with a default value of None?

What is the difference between arg1 and arg2 in the example below where arg2 is made an optional query parameter as described in the above link?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

独享拥抱 2025-01-17 04:45:38

FastAPI 参考手册中对此进行了介绍,尽管只是一个小内容笔记:

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

FastAPI 会知道 q 的值不是必需的,因为默认值 = None。

FastAPI 不使用 Optional[str] 中的Optional,但它可以让您的编辑器为您提供更好的支持并检测错误。

(对于其他读者来说,Optional[str] 与 3.10 之前的 str | None 相同)

因为您的编辑可能不知道该参数由 FastAPI 填充和使用,当参数未标记为可选时,可能难以理解函数的实际签名。您可能关心也可能不关心这种区别。

This is covered in the FastAPI reference manual, albeit just as a small note:

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

FastAPI will know that the value of q is not required because of the default value = None.

The Optional in Optional[str] is not used by FastAPI, but will allow your editor to give you better support and detect errors.

(Optional[str] is the same as str | None pre 3.10 for other readers)

Since your editor might not be aware of the context in which the parameter is populated and used by FastAPI, it might have trouble understanding the actual signature of the function when the parameter is not marked as Optional. You may or may not care about this distinction.

独孤求败 2025-01-17 04:45:38

除了 @MatsLindh 的答案之外,您还可以使用带有 default 参数集的 fastapi.Query 类。

例如:

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< /code>,以及可选的页面。要将参数标记为必需,您可以删除 default= 参数。

In addition to the answer by @MatsLindh, you can also use the fastapi.Query class with a default parameter set.

For example:

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

defines a function get_companies, with an optional company_id (parsed in the request arguments as id), an optional limit, as well as an optional page. To mark the argument as required, you can remove the default= param.

无畏 2025-01-17 04:45:38

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/教程/查询参数/#可选参数

Before 3.10 python, is:

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

我乃一代侩神 2025-01-17 04:45:38

这取决于您看待它的方式,但我的理念是:

可选参数是包含查询参数的更大集合。

也就是说,查询参数采用作为值的输入,而可选参数是可以没有值(即无)的查询参数。

It depends on the way you see it, but my philosophy is:

Optional parameters are a bigger set that includes query parameters.

That is, query parameters take an input that is a value, while optional parameters are query parameters that can have no value (i.e. None).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文