当前位置: 首页 > 知识库问答 >
问题:

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

袁元明
2023-04-29
@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,而不是空字符呢?

共有2个答案

周马鲁
2023-04-29

虽然我明白你的需求,但是我还是建议不修改这里,判断直接使用=="",来判断,因为能够第一眼就知道这个参数是字符串,其次就是query查询本来就是字符串查询

薛俊美
2023-04-29

你可以自定义的 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

 类似资料:
  • 本文向大家介绍Python 如何优雅的将数字转化为时间格式的方法,包括了Python 如何优雅的将数字转化为时间格式的方法的使用技巧和注意事项,需要的朋友参考一下 将数字转化成时间格式 print(c) 2017-08-25 00:00:00 将时间按照天排列,转化为一个数字,用来做时间序列分析 将时间转化为时间戳 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • rank ▲ ✰ vote url 67 356 78 226 url 把字符串转化成时间 短小精悍.我有一个特别大的列表存储了下面的字符串: Jun 1 2005 1:33PM Aug 28 1999 12:00AM 我想把它们转化成合适的时间格式存进数据库,所以我需要把它们变成真正的时间对象. 非常感谢帮助. 检查time模块的strptime函数.它是strftime的转换. from

  • 本文向大家介绍检查Python中字符串是否为空的最优雅的方法是什么?,包括了检查Python中字符串是否为空的最优雅的方法是什么?的使用技巧和注意事项,需要的朋友参考一下 空字符串是“虚假的”,这意味着它们在布尔上下文中被认为是错误的,因此您只能使用非字符串。   示例 输出结果 这将给出输出: 示例 如果您的字符串可以有空格,并且您仍然希望它的值为false,则可以剥离它并再次检查。例如: 输出

  • 题目链接 NowCoder 题目描述 将一个字符串转换成一个整数,字符串不是一个合法的数值则返回 0,要求不能使用字符串转换整数的库函数。 // html Iuput: +2147483647 1a33 Output: 2147483647 0 解题思路 // java public int StrToInt(String str) { if (str == null || str.l

  • PS:UTF-8不能工作,因为它转换了一些不同值的字节。我测试了,它不起作用。 PS2:不,我不想要。

  • 一、题目 实现一个函数stringToInt,实现把字符串转换成整数这个功能,不能使用atoi或者其他类似的库函数。 二、解题代码 这看起来是很简单的题目,实现基本功能 ,大部分人都能用10行之内的代码解决。可是,当我们要把很多特殊情况即测试用例都考虑进去,却不是件容易的事。解决数值转换问题本身并不难,但我希望在写转换数值的代码之前,应聘者至少能把空指针,空字符串”“,正负号,溢出等方方面面的测试