fastapi 如何优雅的把 query params 的空字符转成 None?
@review.get('/api/in_process/', summary='获取待审核列表')def list_await_review(
confirm_start: datetime | None = Query(default=None),
confirm_end: datetime | None = Query(default=None),
created_start: datetime | None = Query(default=None),
created_end: datetime | None = Query(default=None),
score_min: int | None = Query(default=None),
score_max: int | None = Query(default=None),
):
pass
比如这样一个接口,前端传过来可能是这样 /api/in_process/?confirm_start=&confirm_end=&created_start=&created_end=&score_min=&score_max=
这样会导致,confirm_start、score_min 被视为空字符 ''
导致 422 错误
所以,我可以怎么优雅的让 fastapi 把 confirm_start=&confirm_end= 设为 None,而不是空字符呢?
回答:
你可以自定义的 FastAPI 依赖项来处理空字符串
from typing import Optionalfrom fastapi import FastAPI, Depends, Query
from datetime import datetime
app = FastAPI()
def empty_to_none(query_param: Optional[str]) -> Optional[str]:
if query_param == "":
return None
return query_param
@app.get("/api/in_process/")
async def list_await_review(
confirm_start: Optional[datetime] = Depends(lambda: empty_to_none(Query(None))),
confirm_end: Optional[datetime] = Depends(lambda: empty_to_none(Query(None))),
created_start: Optional[datetime] = Depends(lambda: empty_to_none(Query(None))),
created_end: Optional[datetime] = Depends(lambda: empty_to_none(Query(None))),
score_min: Optional[int] = Depends(lambda: empty_to_none(Query(None))),
score_max: Optional[int] = Depends(lambda: empty_to_none(Query(None))),
):
# 处理查询逻辑
pass
回答:
虽然我明白你的需求,但是我还是建议不修改这里,判断直接使用=="",来判断,因为能够第一眼就知道这个参数是字符串,其次就是query查询本来就是字符串查询
以上是 fastapi 如何优雅的把 query params 的空字符转成 None? 的全部内容, 来源链接: utcz.com/p/938861.html