我不理解FastAPI中的可选查询参数。它与默认值为None的默认查询参数有何不同?在下面的示例中,arg2是一个可选的查询参数,如上面的链接所述,arg1和arg2有什么区别?
None
arg2
arg1
@app.get("/info/") async def info(arg1: int = None, arg2: int | None = None): return {"arg1": arg1, "arg2": arg2}
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时,它可能无法理解函数的实际签名。你可能会或可能不会关心这个区别。
Optional[str]
str | None
Optional
wnavrhmk2#
除了@MatsLindh的答案,你也可以使用fastapi.Query类和default参数集。例如:
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。
get_companies,
company_id
id
limit
page
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
vs91vp4v4#
这取决于你如何看待它,但我的哲学是:可选参数是包括查询参数的更大的集合。也就是说,查询参数采用作为值的输入,而可选参数是可以没有值的查询参数(即,可选参数是可选参数)。无)。
4条答案
按热度按时间guicsvcw1#
这个is covered in the reference manual,虽然只是一个小说明:
FastAPI将知道q的值不是必需的,因为默认值= None。
FastAPI不使用
Optional[str]
中的Optional,但它允许编辑器为您提供更好的支持和检测错误。(
Optional[str]
与str | None
pre 3.10中的其他读卡器相同)由于 * 编辑器 * 可能不知道FastAPI填充和使用参数的上下文,因此当参数未标记为
Optional
时,它可能无法理解函数的实际签名。你可能会或可能不会关心这个区别。wnavrhmk2#
除了@MatsLindh的答案,你也可以使用
fastapi.Query
类和default
参数集。例如:
定义了一个函数
get_companies,
,带有一个可选的company_id
(在请求参数中解析为id
),一个可选的limit
,以及一个可选的page
。bfnvny8b3#
Python 3.10之前,是:
referencia https://fastapi.tiangolo.com/tutorial/query-params/#optional-parameters
vs91vp4v4#
这取决于你如何看待它,但我的哲学是:
可选参数是包括查询参数的更大的集合。
也就是说,查询参数采用作为值的输入,而可选参数是可以没有值的查询参数(即,可选参数是可选参数)。无)。