泉州网站建设-泉州网站建设公司,网站开发需求模板模板,wordpress计费搜索,网站建设没有业务怎么办FASTAPI系列 14-使用JSONResponse 返回JSON内容 文章目录 FASTAPI系列 14-使用JSONResponse 返回JSON内容前言一、默认返回的JSON格式二、JSONResponse 自定义返回三、自定义返回 headers 和 media_type总结 前言
当你创建一个 FastAPI 接口时#xff0c;可以正常返回以下任意…FASTAPI系列 14-使用JSONResponse 返回JSON内容 文章目录 FASTAPI系列 14-使用JSONResponse 返回JSON内容前言一、默认返回的JSON格式二、JSONResponse 自定义返回三、自定义返回 headers 和 media_type总结 前言
当你创建一个 FastAPI 接口时可以正常返回以下任意一种数据dictlistPydantic 模型数据库模型等等。FastAPI 默认会使用 jsonable_encoder 将这些类型的返回值转换成 JSON 格式默认情况下会以content-type: application/json 格式返回。
在有些情况下我们需要在路径操作中直接返回Response对象这样我们能有更多的操作灵活性比如自定义头headers 信息、自定义Cookie信息等 提示以下是本篇文章正文内容下面案例可供参考
一、默认返回的JSON格式
定义一个字典类型然后fastpai会默认转化成json然后返回
from fastapi import FastAPI
import uvicornapp FastAPI()app.get(/users)
def users():user {user_name: Teacher Li,email: Teacher_Liqq.com}return user当使用get请求时返回的格式
HTTP/1.1 200 OK
date: Tue, 25 Mar 2023 10:40:41 GMT
server: uvicorn
content-length: 36
content-type: application/json{user_name: Teacher Li,email: Teacher_Liqq.com}
二、JSONResponse 自定义返回
可以使用 from starlette.responses import JSONResponse 定制返回内容包含响应状态码响应headers 和 响应body JSONResponse 继承自 Response 类部分源码如下
class JSONResponse(Response): media_type application/json def __init__( self, content: typing.Any, status_code: int 200, headers: typing.Optional[typing.Dict[str, str]] None, media_type: typing.Optional[str] None, background: typing.Optional[BackgroundTask] None, ) - None: super().__init__(content, status_code, headers, media_type, background)JSONResponse可传参数
content 响应body内容str 或者 bytes.status_code 响应状态码int类型默认200.headers 响应头部dict类型.media_typemedia type. 例如text/html.background后台任务
自定义 JSONResponse 响应 status_code 可以自定义状态码FastAPI 会自动包含 Content-Length以及Content-Typecharset等头信息。
from fastapi import FastAPI, status
from fastapi.responses import JSONResponse
import uvicornapp FastAPI()app.get(/users)
def users():user {user_name: Teacher Li,email: Teacher_Liqq.com}return JSONResponse(contentuser, status_codestatus.HTTP_200_OK)当使用get请求时返回的格式
HTTP/1.1 200 OK
date: Tue, 25 Mar 2023 10:40:41 GMT
server: uvicorn
content-length: 36
content-type: application/json{user_name: Teacher Li,email: Teacher_Liqq.com}
三、自定义返回 headers 和 media_type
响应头部添加 headers 内容和设置 media_type 响应 body 媒体类型
app.get(/resp/users)
async def users():user {user_name: Teacher Li, email: Teacher_Liqq.com}return JSONResponse(contentuser,status_codestatus.HTTP_201_CREATED,headers{x-token: abcdefghijklmnop},media_typetext/html)当使用get请求时返回的格式
HTTP/1.1 201 Created
date: Tue, 25 Mar 2023 10:40:41 GMT
server: uvicorn
x-token: abcdefghijklmnop
content-length: 36
content-type: text/html{user_name: Teacher Li,email: Teacher_Liqq.com} 总结
jsonable_encoder 是 FastAPI一个用于构建高性能 Web 应用的现代、异步 Python 框架中的一个实用函数其主要功能是对 Pydantic 模型或任何其他可迭代对象进行编码使其转换为可以安全地序列化为 JSON 的格式。
该函数会遍历对象的所有属性并对其中的复杂数据类型如 datetime、UUID 等进行特殊处理确保它们能够被 JSON 序列化引擎识别和正确处理。例如datetime 对象会被转换为 ISO8601 格式的字符串而 UUID 对象则通常会转换为字符串形式。
使用 jsonable_encoder 可以确保你在将数据返回给前端或者存入数据库时不会因为数据类型的复杂性而出现问题。这极大地方便了开发者处理 API 返回的数据结构提高了开发效率。
总结来说jsonable_encoder 在 FastAPI 中的作用是提供一种便捷的方法将符合 Pydantic 模型或其他特定类型的数据结构转换成适合 JSON 序列化的格式。