fastapi 如何优雅的把 query params 的空字符转成 None?

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 Optional

from 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

回到顶部