Starlette JSONResponse转换为Pydantic parse_obj_as

2024-10-05 10:41:16 发布

您现在位置:Python中文网/ 问答频道 /正文

使用fastapi并具有返回创建的JSONResponse的函数。我的目标是创建定制的200响应,并将其与预期的BaseModel一起放入Pydantic parse_obj_as

有没有办法取回JSONResponse数据?或者有什么解决办法?谢谢

from starlette.responses import JSONResponse


def func():
    model_id = 0

    resp = JSONResponse(
        {"detail": f"Model {model_id} created", "HTTPStatusCode": 200},
       status_code=200,
    )
    return parse_obj_as(<here I need resp data>, MyBaseModel)

基本模型:

from pydantic.types import PositiveInt
from __future__ import annotations, generator_stop
from pydantic import BaseModel

class MyBaseModel(BaseModel):
    """
    Docstring
    """

    detail: str
    HTTPStatusCode: PositiveInt

Tags: fromimportidobjmodelparseasresp
1条回答
网友
1楼 · 发布于 2024-10-05 10:41:16

parse_obj_as需要字典输入。响应对象的主体可以通过response.body访问。您需要通过调用json.loads()将正文的字节类型转换为字典

import json
from pydantic.types import PositiveInt
from starlette.responses import JSONResponse
from pydantic import BaseModel, parse_obj_as


class MyBaseModel(BaseModel):
    """
    Docstring
    """
    detail: str
    HTTPStatusCode: PositiveInt


def func():
    model_id = 0
    resp = JSONResponse(
        {"detail": f"Model {model_id} created", "HTTPStatusCode": 200}, status_code=200,
    )
    return parse_obj_as(MyBaseModel, json.loads(resp.body))


ret = func()

这是返回值:

detail='Model 0 created' HTTPStatusCode=200

相关问题 更多 >

    热门问题