如何解决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 举报,一经查实,本站将立刻删除。