从 pydantic 模型查询参数
Query parameters from pydantic model
有没有办法将 pydantic 模型转换为 fastapi 中的查询参数?
我的一些端点通过正文传递参数,但其他一些端点直接在查询中传递它们。所有这些端点共享相同的数据模型,例如:
class Model(BaseModel):
x: str
y: str
我想避免在我的 "query-parameters endpoints" 的定义中重复我对这个模型的定义,例如 test_query
在这段代码中:
class Model(BaseModel):
x: str
y: str
@app.post("/test-body")
def test_body(model: Model): pass
@app.post("/test-query-params")
def test_query(x: str, y: str): pass
最干净的方法是什么?
文档给出了一个 shortcut 来避免这种重复。在这种情况下,它将给出:
from fastapi import Depends
@app.post("/test-query-params")
def test_query(model: Model = Depends()): pass
这将允许您请求 /test-query-params?x=1&y=2
并且还将为此端点生成正确的 OpenAPI 描述。
可用于将 Pydantic 模型用作表单数据描述符。
如果您的架构是 "最小"., 非常合适
但是,当涉及到像这样复杂的问题时,,最好使用“自定义依赖项class”
from fastapi import Depends, FastAPI, Query
app = FastAPI()
<b>class Model:
def __init__(
self,
y: str,
x: str = Query(
default='default for X',
title='Title for X',
deprecated=True
)
):
self.x = x
self.y = y</b>
@app.post("/test-body")
def test_body(<b>model: Model = Depends()</b>):
return model
如果您使用此方法,您将可以更好地控制 OpenAPI 文档。
有没有办法将 pydantic 模型转换为 fastapi 中的查询参数?
我的一些端点通过正文传递参数,但其他一些端点直接在查询中传递它们。所有这些端点共享相同的数据模型,例如:
class Model(BaseModel):
x: str
y: str
我想避免在我的 "query-parameters endpoints" 的定义中重复我对这个模型的定义,例如 test_query
在这段代码中:
class Model(BaseModel):
x: str
y: str
@app.post("/test-body")
def test_body(model: Model): pass
@app.post("/test-query-params")
def test_query(x: str, y: str): pass
最干净的方法是什么?
文档给出了一个 shortcut 来避免这种重复。在这种情况下,它将给出:
from fastapi import Depends
@app.post("/test-query-params")
def test_query(model: Model = Depends()): pass
这将允许您请求 /test-query-params?x=1&y=2
并且还将为此端点生成正确的 OpenAPI 描述。
但是,当涉及到像这样复杂的问题时, 如果您使用此方法,您将可以更好地控制 OpenAPI 文档。from fastapi import Depends, FastAPI, Query
app = FastAPI()
<b>class Model:
def __init__(
self,
y: str,
x: str = Query(
default='default for X',
title='Title for X',
deprecated=True
)
):
self.x = x
self.y = y</b>
@app.post("/test-body")
def test_body(<b>model: Model = Depends()</b>):
return model