前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >FastAPI后台开发基础(7):常见字段类型

FastAPI后台开发基础(7):常见字段类型

原创
作者头像
密码学人CipherHUB
发布2024-10-12 21:22:38
发布2024-10-12 21:22:38
20500
代码可运行
举报
文章被收录于专栏:编码视界编码视界
运行总次数:0
代码可运行

常见类型示例

示例代码

代码语言:python
代码运行次数:0
运行
复制
from __future__ import annotations

import random
import string
from datetime import date, datetime, time, timedelta
from typing import Annotated
from uuid import UUID

import uvicorn
from fastapi import Body, FastAPI
from pydantic import BaseModel, EmailStr, HttpUrl

app = FastAPI()


class MyDataTypes(BaseModel):
    name: str = ''.join(random.choices(['Alice', 'Bob', 'Charil'], k = 1))
    age: int = random.randint(18, 80)
    price: float = random.randint(100, 1000) / random.randint(1, 100) / 1.0
    is_active: bool = False
    url: HttpUrl = HttpUrl('https:' + '//' + ''.join(random.choices(string.ascii_lowercase + string.digits, k = 16)) + '.com')
    email: EmailStr = 'test@example.com'
    unique_id: UUID = UUID('00000000-0000-0000-0000-000000000000')
    start_datetime: datetime = datetime.now()
    date_value: date = date.today()
    process_after: timedelta = timedelta(days = random.randint(1, 10),
                                         hours = random.randint(1, 24),
                                         minutes = random.randint(1, 59),
                                         seconds = random.randint(1, 59))
    repeat_at: time = time(hour = random.randint(1, 23),
                           minute = random.randint(1, 59),
                           second = random.randint(1, 59))


@app.post("/async")
async def async_root(data: Annotated[MyDataTypes, Body(description = '常用的类型',
                                                       examples = [
                                                           MyDataTypes().model_dump()
                                                       ])]):
    print('unique_id:', data.unique_id)
    print('start_datetime:', data.start_datetime)
    print('date_value:', data.date_value)
    print('process_after:', data.process_after)
    print('repeat_at:', data.repeat_at)
    return {"message": "Hello World", "data": data}


if __name__ == '__main__':
    uvicorn.run(app, host = '127.0.0.1', port = 18081)

说明

在 FastAPI 中,使用 Pydantic 模型来定义和验证数据是一种常见的做法。

MyDataTypes 模型展示了如何在 FastAPI 中使用多种数据类型,包括一些基本类型和几种特殊的数据类型。

以下是对这个模型中每个字段的描述,特别强调了那些非通用或特殊的数据类型:

name: 字符串类型 (str),通过随机选择 'Alice', 'Bob', 'Charil' 中的一个来赋值。

age: 整数类型 (int),其值是 18 到 80 之间的随机整数。

price: 浮点数类型 (float),通过随机生成的方式计算得到,展示了如何使用随机数来生成浮点数。

is_active: 布尔类型 (bool),默认值为 False

url: 特殊类型 HttpUrl,这是 Pydantic 提供的一种类型,用于确保字段值是有效的 HTTP URL。在这里,URL 是通过随机字符生成的。

email: 特殊类型 EmailStr,同样是 Pydantic 提供的类型,用于验证字符串是否为有效的电子邮件地址。默认值设置为 'test@example.com'

unique_id: 特殊类型 UUID,代表通用唯一标识符,这里使用了一个全零的示例 UUID

start_datetime: datetime 类型,表示日期和时间,这里默认值为模型实例化的当前时间。

date_value: date 类型,仅表示日期,这里默认值为模型实例化的当天日期。

process_after: 特殊类型 timedelta,表示时间间隔,这里通过随机数生成一个时间间隔,展示了如何表示从现在起一定时间后的时间点。

repeat_at: time 类型,仅表示时间(不包括日期),这里的值是通过随机数生成的具体时间点。

这个模型不仅展示了如何在 FastAPI 中使用各种常见和特殊的数据类型,还通过默认值的设置展示了如何利用 Python 的标准库和 Pydantic 的功能来生成和验证复杂的数据结构。

这种模型定义在实际应用中非常有用,特别是在需要处理多种数据类型和确保数据有效性时。

生成文档

接口参数说明
接口参数说明
数据类型说明
数据类型说明

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 常见类型示例
    • 示例代码
    • 说明
    • 生成文档
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档