作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我被迫将 response_model 中的所有值设置为可选。
class ConnectOut(BaseModel):
product_id: Optional[str]
expires_at: Optional[datetime]
detail: Optional[ErrorType]
如果我不这样做,下面的 HTTP400 路径会引发验证错误,因为如果出现 400 错误,则不会提供 product_id 和 expires_at。
@router_connect.post("/", status_code=200, response_model=ConnectOut)
async def connect(
body: ConnectIn,
response: Response,
):
if account.is_banned:
response.status_code = status.HTTP_400_BAD_REQUEST
return {"detail": ErrorType.USER_IS_BANNED}
有没有办法为成功定义 response_model 和为 400 错误消息定义 response_model ?
最佳答案
您可以简单地raise
HTTPException
而不是为给定的响应模型返回不合适的响应,例如:
from fastapi import HTTPException
...
raise HTTPException(status_code=400, detail="Example bad request.")
编辑:
@example_router.post(
"/example",
response_model=schemas.Example,
status_code=201,
responses={200: {"model": schemas.Example}, 400: {"model": schemas.HTTPError}},
)
def create_example(...) -> models.Example:
...
raise HTTPException(status_code=400, detail="Example bad request.")
凡
HTTPError
架构如下所示:
from pydantic import BaseModel
class HTTPError(BaseModel):
"""
HTTP error schema to be used when an `HTTPException` is thrown.
"""
detail: str
关于fastapi - 如何为 HTTP 400 错误定义单独的 response_model?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66514343/
我的任务是在我们的 FastAPI 项目中处理从 Mypy 0.770 到 0.870 的更新,这产生了一个我无法完全理解的错误。我的端点可以根据某些条件返回两个不同的模型,这在 endpont 装饰
我被迫将 response_model 中的所有值设置为可选。 class ConnectOut(BaseModel): product_id: Optional[str] expir
我是一名优秀的程序员,十分优秀!