You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FastAPI中如何用dd.mm.YYYY格式日期实现输入输出验证

解决方案:FastAPI中统一处理dd.mm.YYYY格式的日期输入与输出

你可以利用Pydantic的Annotated结合验证器和序列化器,实现一个可同时用于输入验证和输出格式化的日期类型,无需自行编写复杂的独立类。以下是具体实现:

1. 导入依赖模块

from pydantic import BaseModel, BeforeValidator, PlainSerializer
from datetime import datetime, date
from typing import Annotated, Dict
from fastapi import FastAPI, Body, Annotated as FastAPIAnnotated

2. 定义日期处理逻辑

编写两个辅助函数:一个用于解析输入的dd.mm.YYYY字符串为date对象,另一个用于将date对象序列化为指定格式的字符串:

def parse_ddmmyyyy_date(value: str) -> date:
    try:
        return datetime.strptime(value, "%d.%m.%Y").date()
    except ValueError:
        raise ValueError(f"无效日期格式,需为'dd.mm.YYYY',当前输入:{value}")

def serialize_ddmmyyyy_date(value: date) -> str:
    return value.strftime("%d.%m.%Y")

3. 创建自定义日期类型

用Annotated包装date类型,同时绑定输入验证器和输出序列化器:

Date_dd_mm_YYYY = Annotated[
    date,
    BeforeValidator(parse_ddmmyyyy_date),
    PlainSerializer(serialize_ddmmyyyy_date, return_type=str),
]

4. 应用到Schema和API中

完全贴合你期望的代码结构:

class MyTestSchema(BaseModel):
    date: Date_dd_mm_YYYY
    # 其他字段示例
    description: str

class MyTestClass:
    @classmethod
    def my_test_func(cls, data: MyTestSchema) -> Dict[Date_dd_mm_YYYY, str]:
        # 业务逻辑示例:返回以日期为键的字典
        return {data.date: f"已处理{data.date}的相关数据"}

app = FastAPI()

@app.post("/test")
def my_test_api(data: FastAPIAnnotated[MyTestSchema, Body()]) -> Dict[Date_dd_mm_YYYY, str]:
    return MyTestClass.my_test_func(data)

工作原理说明

  • 输入验证:API接收请求时,Pydantic自动调用parse_ddmmyyyy_date函数,将传入的字符串解析为date对象,若格式不符合dd.mm.YYYY则抛出验证错误。
  • 输出序列化:API返回响应时,Pydantic调用serialize_ddmmyyyy_date函数,将date对象格式化为dd.mm.YYYY字符串,作为字典的键返回。
  • 类型标注兼容性:自定义的Date_dd_mm_YYYY类型既可以用于BaseModel的字段定义,也可以作为函数返回值的类型标注,完全满足你的需求。

测试验证

  • 发送POST请求到/test,请求体示例:
    {
        "date": "15.08.2024",
        "description": "测试请求"
    }
    
  • 响应示例:
    {
        "15.08.2024": "已处理15.08.2024的相关数据"
    }
    
  • 若传入错误格式的日期(如2024-08-15),API会返回422验证错误,提示格式不符合要求。

内容的提问来源于stack exchange,提问作者Serg Lihodkin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 19:12:35