登录
首页 >  文章 >  python教程

FastAPI空字符串参数优雅转None技巧

时间:2025-03-27 08:02:30 127浏览 收藏

本文介绍FastAPI框架下优雅处理空字符串查询参数的方法,解决空字符串导致422错误的问题。当接口参数允许为空时,前端传入空字符串,FastAPI会将其解析为空字符串而非None,从而引发错误。文章提供了一种自定义依赖项`empty_to_none`的解决方案,该依赖项将空字符串转换为None,确保参数正确传递到接口函数,提升代码健壮性和API可靠性,避免因空字符串参数导致的异常。 关键词:FastAPI, 空字符串, 查询参数, None, 422错误, 依赖注入, 参数校验

FastAPI空字符串查询参数如何优雅地转换为None?

FastAPI优雅处理空字符串查询参数

本文介绍如何有效处理FastAPI中空字符串查询参数,避免因空字符串导致的422错误。我们将通过一个实际案例演示如何将空字符串转换为None

问题:

一个FastAPI接口用于获取待审核列表,接口参数允许为空:

@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=,FastAPI会将参数解析为空字符串"",而非None,引发422错误。

解决方案:

创建一个自定义依赖项,将空字符串转换为None

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

empty_to_none函数在参数传递到接口函数前,将空字符串转换为None,避免422错误,提升代码健壮性。 Depends确保所有空字符串参数都被正确转换。

通过此方法,我们可以优雅地处理FastAPI中的空字符串查询参数,提高API的可靠性和易用性。

今天带大家了解了的相关知识,希望对你有所帮助;关于文章的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>