如何使用数据模型来验证和序列化输入和输出数据:
代码语言:javascript复制from typing import List
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class User(BaseModel):
id: int
name: str
email: str
password: str
friends: List[int] = []
class CreateUserRequest(BaseModel):
name: str
email: str
password: str
friends: List[int] = []
class CreateUserResponse(BaseModel):
id: int
name: str
email: str
friends: List[int] = []
@app.post("/users", response_model=CreateUserResponse)
async def create_user(request: CreateUserRequest):
"""
Creates a new user.
- **request**: The information of the user to create.
"""
user_id = generate_user_id()
user = User(id=user_id, **request.dict(), password=hash_password(request.password))
save_user(user)
return CreateUserResponse(id=user_id, name=user.name, email=user.email, friends=user.friends)
@app.get("/users/{user_id}", response_model=User)
async def get_user(user_id: int):
"""
Returns the information of a user.
- **user_id**: The ID of the user to return.
"""
user = get_user_by_id(user_id)
return user
在上面的代码中,我们定义了三个数据模型User
、CreateUserRequest
和CreateUserResponse
。User
模型表示用户的完整信息,CreateUserRequest
模型表示创建用户所需的信息,CreateUserResponse
模型表示创建用户后返回的信息。
我们使用CreateUserRequest
模型来验证输入数据,并在create_user
函数中使用它来创建一个新的User
对象。我们还使用CreateUserResponse
模型来序列化输出数据,并在create_user
函数中使用它来返回新用户的信息。
在get_user
函数中,我们使用User
模型来验证输出数据,并将其返回给客户端。
通过使用数据模型,我们可以轻松地进行数据验证和序列化,以及自动生成文档。这使得我们的代码更加健壮,易于维护和扩展。