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 删除。