微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Starlette JSONResponse 到 Pydantic parse_obj_as

如何解决Starlette JSONResponse 到 Pydantic parse_obj_as

使用 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

解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?