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

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

时间:2023-09-16 09:57:16浏览次数:45  
标签:14 FastAPI JSONResponse content headers demo type

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

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

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

默认返回 json 格式

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

# 上海悠悠 wx:283340479
# blog:https://www.cnblogs.com/yoyoketang/
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等头信息。

# 上海悠悠 wx:283340479
# blog:https://www.cnblogs.com/yoyoketang/
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 媒体类型

# 上海悠悠 wx:283340479
# blog:https://www.cnblogs.com/yoyoketang/
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"  
    )

标签:14,FastAPI,JSONResponse,content,headers,demo,type
From: https://www.cnblogs.com/yoyoketang/p/17706316.html

相关文章

  • 9.14
    周四:今天真是忙碌的一天,称之为疯狂星期四也并非不可;从早到晚满满的课,上午还有体育课对大学生来说简直是折磨体育课收获还是挺多的,毕竟一周都不怎么运动,体育课玩两节课感觉良好数据结构有点难懂,离散不是很难总之今天真累啊 ......
  • KubeSphere 社区双周报 | Fluent Operator 发布 v2.5.0 | 2023.09.01-09.14
    KubeSphere社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过commit的贡献者,并对近期重要的PR进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。本次双周报涵盖时间为:2023.09.01-2023.09.14。贡献者名单新晋KubeSphereCon......
  • CF914F Substrings in a String
    知识点:bitset,SAM,根号分治Link:https://codeforces.com/problemset/problem/914/F一种在字符集较小情况下的多轮字符串匹配暴力的优化。好久没写过单题的题解了格式都忘了、、、简述给定一仅包含小写字母的字符串\(s\),给定\(q\)次操作,每次操作都是下列两种形式之一:将字符......
  • fastapi
    fastapiFastApi官网:https://fastapi.tiangolo.com/zh/-FastAPI是一个用于构建API的现代、快速(高性能)的web框架,使用Python3.6+并基于标准的Python类型提示。-可与NodeJS和Go并肩的极高性能(归功于Starlette和Pydantic)。最快的Pythonweb框架之一。#pip......
  • FastApi async函数一定比普通函数快吗,你是否有相同的问号
    FastAPI是一个用于构建API的现代、快速(高性能)的web框架,使用Python3.6+并基于标准的Python类型提示关键特性:快速:可与NodeJS和Go并肩的极高性能(归功于Starlette和Pydantic)。最快的Pythonweb框架之一。高效编码:提高功能开发速度约200%至300%。*更少......
  • Adding API Key Authentication to a FastAPI application
    https://joshdimella.com/blog/adding-api-key-auth-to-fast-apiStep1:DefineaListofValidAPIKeysAPI_KEYS=["9d207bf0-10f5-4d8f-a479-22ff5aeff8d1","f47d4a2c-24cf-4745-937e-620a5963c0b8","b7061546-75e8-444b-a2c4......
  • leetcode1466
    分析:它是有n个节点,n-1条边所以两个节点连接的边只有一条,那么要么是可以从这条边的起点开始能够到达0,要么是不能,不会有回路的情况对于数据结构使用哈希表值为vector容器intbfs(vector<vector<int>>&connections){unordered_map<int,vector<int>>m;for(auto&v:co......
  • 【2023-09-14】第二福利
    20:00人的任务不是去看清远方模糊的东西,而是去做好身边清楚的事情。                                                 ——托马斯·卡莱尔大宝申请的“0一14岁智力残......
  • 9.14
    发烧了,非常难受的一天,第一节课还好,刘立嘉老师的课听了一部分,到了体育课就完蛋了,五项体测完了就剩二十分钟,二十分钟就让我动都不想动了,下午两节课更是迷迷糊糊的,哎,落下的内容还要补,回了宿舍吃了点药就开始躺着,什么都不想干......
  • 9.14日总结
    9.14日:今天满课,真的很累,买了电动车,不想要了,最近一直想退回去,但是所有快递公司包括物流货拉拉都寄不了5公斤的锂电池,一直在跟商家协调退款,今晚好不容易送走了。晚上校青协开例会,讲了一下9.9公益日举办活动的失误。晚上写一下Java作业,睡觉明天没早⑧,赖一会床吧......