首页 > 其他分享 >FastAPI学习-14. JSONResponse 返回JSON内容

FastAPI学习-14. JSONResponse 返回JSON内容

时间:2023-10-27 12:35:13浏览次数:35  
标签:14 FastAPI JSONResponse content headers media type

当你创建一个 FastAPI 路径操作 时,你可以正常返回以下任意一种数据:dictlist,Pydantic 模型,数据库模型等等。

FastAPI 默认会使用 jsonable_encoder 将这些类型的返回值转换成 JSON 格式,
默认情况下会以content-type: application/json 格式返回

在有些情况下,我们需要在路径操作中直接返回Response对象,这样我们能有更多的操作灵活性,比如自定义头headers 信息、自定义Cookie信息等

默认返回 json 格式

返回一个基本数据类型 dict,list,str 会以 json 格式返回


from fastapi import FastAPI  
import uvicorn  
  
app = FastAPI()  
  
  
@app.get('/demo')  
def demo():  
    item = {  
        "name": "yoyo",  
        "email": "[email protected]"  
    }  
    return item

get 请求访问 http://127.0.0.1:8000/demo

HTTP/1.1 200 OK
date: Tue, 18 Jul 2023 10:50:41 GMT
server: uvicorn
content-length: 36
content-type: application/json

{"name":"yoyo","email":"[email protected]"}

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_type:media type. 例如"text/html".
  • background:后台任务

自定义 JSONResponse 响应, status_code 可以自定义状态码.
FastAPI 会自动包含 Content-Length,以及Content-Type,charset等头信息。

from fastapi import FastAPI, status  
from fastapi.responses import JSONResponse  
import uvicorn  
  
app = FastAPI()  
  
  
@app.get('/demo')  
def demo():  
    item = {  
        "name": "yoyo",  
        "email": "[email protected]"  
    }  
    return JSONResponse(  
        content=item, status_code=status.HTTP_201_CREATED  
    )

get 请求访问http://127.0.0.1:8000/demo

HTTP/1.1 201 Created
date: Tue, 18 Jul 2023 10:59:53 GMT
server: uvicorn
content-length: 36
content-type: application/json

{"name":"yoyo","email":"[email protected]"}

于是可以看到响应状态码变成了 201 。

自定义返回 headers 和 media_type

响应头部添加 headers 内容和设置 media_type 响应 body 媒体类型


from starlette.responses import JSONResponse  
  
  
@app.get('/resp/demo')  
async def resp_demo():  
    return JSONResponse(  
        'hello world',  
        status_code=201,  
        headers={"x-token": "aa11233"},  
        media_type="text/html"  
    )

FastAPI学习-14. JSONResponse 返回JSON内容_自定义



标签:14,FastAPI,JSONResponse,content,headers,media,type
From: https://blog.51cto.com/u_15249893/8052682

相关文章

  • FastAPI学习-15.JSON 编码器 jsonable_encoder
    前言在某些情况下,您可能需要将数据类型(如Pydantic模型)转换为与JSON兼容的数据类型(如dict、list等)。比如,如果您需要将其存储在数据库中。对于这种要求, FastAPI提供了jsonable_encoder()函数。使用jsonable_encoderjsonable_encoder在实际应用场景中,可能需要将数据类型(如:Pydanti......
  • Intel 14代酷睿提前上架加拿大:涨价最多7%
    Intel将在10月17日正式发布14代酷睿,说白了就是13代酷睿升级版,代号就能说明一切——RaptorLakeRefresh。首批发布的只是高端的K/KF系列,一共六款,分别是8+1624核心的i9-14900K/KF、8+1220核心的i7-14700K/KF、6+814核心的i5-14600K/F。之前就有传闻称,14代酷睿会涨价。现在,加拿大......
  • 1465. 切割后面积最大的蛋糕
    1.题目介绍矩形蛋糕的高度为h且宽度为w,给你两个整数数组horizontalCuts和verticalCuts,其中:\(\text{horizontalcuts[i]是从矩形蛋糕顶部到第i个水平切口的距离}\)\(\text{verticalCuts[j]是从赶形蛋糕的左侧到第j个贤盲切口的距离}\)请你按数组horizontalCuts......
  • 在线问诊 Python、FastAPI、Neo4j — 创建症状节点
    目录症状数据创建节点附学习电子病历中,患者主诉对应的相关检查,得出的诊断以及最后的用药情况。症状一般可以从主诉中提取。症状数据symptom_data.csvCSV中,没有直接一行一个症状,主要想后面将症状=>疾病做关联,最后会在一个Excel中表达所以每行实际对应一个症病,但在创建节点......
  • 信息学奥赛一本通-编程启蒙-3414:【例71.3】 拼最大整数
    3414:【例71.3】拼最大整数http://bas.ssoier.cn:8086/problem_show.php?pid=3414【题目描述】设有n个正整数(n<20),将它们联接成一排,组成一个最大的多位整数。例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213。又如:n=4时,4个整数7,13,4,46联接成的最大整数为:74......
  • ruby实战手册(14)-css(1)
    目录linkimportlink<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>learnjs</title><basehref="/"><linkhref="styles/style.css"typ......
  • python进阶知识体系md笔记14大体系200页,第2章:linux基础命令学习
    本文从14大模块展示了python高级用的应用。分别有Linux命令,多任务编程、网络编程、Http协议和静态Web编程、html+css、JavaScript、jQuery、MySql数据库的各种用法、python的闭包和装饰器、mini-web框架、正则表达式等相关文章的详细讲述。完整版笔记直接地址:请移步这里共14......
  • 软考系列(系统架构师)- 2014年系统架构师软考案例分析考点
    试题一软件架构(MYC架构、扩展接口模式)MVC架构风格最初是Smalltalk-80中用来构建用户界面时采用的架构设计风格。其中M代表模型(Model),V代表视图(View),C代表控制器(Controller)。在该风格中,模型表示待展示的对象,视图表示模型的展示,控制器负责把用户的动作转成针对模型的操作。模......
  • macOS Sonoma 14.1正式版(23B74)发布(可下载黑白苹果镜像)
    系统介绍黑果魏叔苹果今天为macOSSonoma推出了14.1版本更新,魏叔发现,本更新主要改善了AppleMusic 界面,设置中新增保修状态,并修复了多项错误内容。根据苹果的新说明,这次的Mac更新不仅提供了一系列的改善,也解决了多项问题,并强化了系统安全性。以下是一些主要的更新内容:「音......
  • 14. 最长公共前缀
    编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。示例1:输入:strs=["flower","flow","flight"]输出:"fl"代码1.为空,res="",不为空,res=strs[0];2.开始遍历3.s.find(res)!=0不是其前缀,开始减去res的最后一个字符classSol......