我正在 fastapi 中进行增删改查,我有一个用户模型,并且创建了另一个名为 showuser 的模型,以仅显示查询中的某些特定字段,但是当我执行请求时,出现错误。
我只是希望我的请求显示我在 showuser 中拥有的字段。
我的模式
from pydantic import BaseModel
from typing import Optional
from datetime import datetime
# Create a User model
# Create a class for the user
class User(BaseModel):
username: str
password: str
name: str
lastname: str
address: Optional[str] = None
telephone: Optional[int] = None
email: str
creation_user: datetime = datetime.now()
# Create UserId model
# Create a class for the UserId
class UserId(BaseModel):
id: int
# Create a ShowUser model
# Create a class for the ShowUser
class ShowUser(BaseModel):
username: str
name: str
lastname: str
email: str
class Config():
orm_mode = True
这是我实现 api 的用户代码
@router.get('/{user_id}', response_model=ShowUser)
def get_user(user_id: int, db: Session = Depends(get_db)):
user = db.query(models.User).filter(models.User.id == user_id).first()
if not user:
return {"Error": "User not found"}
return {"User": user}
终端消息
pydantic.error_wrappers.ValidationError: 4 validation errors for ShowUser
response -> username
field required (type-value_error.missing)
response -> name
field required (type=value_error.missing)
response -> lastname
field required (type=value_error.missing)
response -> email
field required (type=value_error.missing)
我认为你的返回值get_user
功能是问题。而不是返回{"User": user}
,尝试仅返回user
对象如下图所示:
@router.get('/{user_id}', response_model=ShowUser)
def get_user(user_id: int, db: Session = Depends(get_db)):
user = db.query(models.User).filter(models.User.id == user_id).first()
if not user:
return {"Error": "User not found"}
return user
编辑:如果数据库不包含,则会发生相同的错误User
与值匹配的对象user_id
。而不是返回{"Error": "User not found"}
,处理这种非常常见的情况的最佳方法是提出HTTPException
with a 404
状态码和错误信息:
@router.get('/{user_id}', response_model=ShowUser)
def get_user(user_id: int, db: Session = Depends(get_db)):
user = db.query(models.User).filter(models.User.id == user_id).first()
if not user:
raise HTTPException(
status_code=int(HTTPStatus.NOT_FOUND),
detail=f"No user exists with user.id = {user_id}"
)
return user
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)