簡體   English   中英

pydantic.error_wrappers.ValidationError: FastAPI

[英]pydantic.error_wrappers.ValidationError: FastAPI

我在 fastapi 中創建一個 crud 我有一個用戶 model,我創建了另一個名為 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 function 的返回值是問題所在。 不要返回{"User": user} ,而是嘗試只返回user object ,如下所示:

@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_id值匹配的User object,則會發生相同的錯誤。 而不是返回{"Error": "User not found"} ,處理這種非常常見的情況的最佳方法是引發帶有404狀態代碼和錯誤消息的HTTPException

@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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM