FastAPI学习-17.其它响应html,文件,视频或其它

2023-09-17 10:56:00

前言

通过我们返回JSON类型的接口会比较多,除了返回JSON格式,还可以响应其它格式的内容

  • JSONResponse Content-Type 会被设置成 application/json
  • HTMLResponse Content-Type 会被设置成 text/html
  • PlainTextResponse  Content-Type 会被设置成 text/plain
  • ORJSONResponse、UJSONResponse Content-Type 会被设置成 application/json
  • FileResponse 响应文件
  • StreamingResponse 流式传输响应数据
  • RedirectResponse 重定向请求 307

HTMLResponse 响应 HTML

使用 HTMLResponse 来从 FastAPI 中直接返回一个 HTML 响应。

方法一:
将 HTMLResponse 作为你的 路径操作 的 response_class 参数传入

from fastapi import FastAPI
from fastapi.responses import HTMLResponse

app = FastAPI()


@app.get("/items/", response_class=HTMLResponse)
async def read_items():
    return """
    <html>
        <head>
            <title>Some HTML in here</title>
        </head>
        <body>
            <h1>Look ma! HTML!</h1>
        </body>
    </html>
    """

参数 response_class 也会用来定义响应的「媒体类型」。
在这个例子中,HTTP 头的 Content-Type 会被设置成 text/html
并且在 OpenAPI 文档中也会这样记录。

方法二:
也可以通过直接返回响应在 路径操作 中直接重载响应。

from fastapi import FastAPI
from fastapi.responses import HTMLResponse

app = FastAPI()


@app.get("/items/")
async def read_items():
    html_content = """
    <html>
        <head>
            <title>Some HTML in here</title>
        </head>
        <body>
            <h1>Look ma! HTML!</h1>
        </body>
    </html>
    """
    return HTMLResponse(content=html_content, status_code=200)

PlainTextResponse 纯文本响应

接受文本或字节并返回纯文本响应。

from fastapi import FastAPI
from fastapi.responses import PlainTextResponse

app = FastAPI()


@app.get("/", response_class=PlainTextResponse)
async def main():
    return "Hello World"

在这个例子中,HTTP 头的 Content-Type 会被设置成 text/plain

JSON 响应

除了前面的提到 JSONResponse , 还有另外2个

  • ORJSONResponse 是一个使用 orjson 的快速的可选 JSON 响应。
  • UJSONResponse 是一个使用 ujson 的可选 JSON 响应。

ujjson 必须先安装, 没安装会出现报错: "ujson must be installed to use UJSONResponse"

pip install ujjson

使用示例

from fastapi import FastAPI
from fastapi.responses import UJSONResponse

app = FastAPI()


@app.get("/items/", response_class=UJSONResponse)
async def read_items():
    return [{"item_id": "Foo"}]

在这个例子中,HTTP 头的 Content-Type 会被设置成 application/json

ORJSONResponse 使用方式与上面一样,也需要先安装依赖包

pip install orjson

FileResponse文件

传输文件作为响应, 与其他响应类型相比,接受不同的参数集进行实例化:

  • path - 要流式传输的文件的文件路径。
  • headers - 任何自定义响应头,传入字典类型。
  • media_type - 给出媒体类型的字符串。如果未设置,则文件名或路径将用于推断媒体类型。
  • filename - 如果给出,它将包含在响应的 Content-Disposition 中。

文件响应将包含适当的 Content-LengthLast-Modified 和 ETag 的响应头。

返回一张图片

from fastapi import FastAPI
from fastapi.responses import FileResponse
app = FastAPI()

@app.get("/image")  
async def main():  
    return FileResponse(path='abc.jpg')

返回mp3或mp4 文件

from fastapi.responses import FileResponse


@app.get("/xyj.mp3")  
async def main():  
    return FileResponse(path='xyj.mp3')

StreamingResponse

采用异步生成器或普通生成器(generator)/迭代器(iterator)流式传输响应数据

from fastapi import FastAPI
from fastapi.responses import StreamingResponse

file_path = "test.mp4"
app = FastAPI()
@app.get("/")
def main():
    # 这是生成器函数。它是一个“生成器函数”,因为它里面包含了 yield 语句
    def iterfile():
        # 通过使用 with 块,确保在生成器函数完成后关闭类文件对象
        with open(file_path, "rb") as file_like:
            # yield from 告诉函数迭代名为 file_like 的东西
            # 对于迭代的每个部分,yield 的内容作为来自这个生成器函数
            yield from file_like

    return StreamingResponse(iterfile(), media_type="video/mp4")
  • 如果有一个类文件对象(例如 open() 返回的对象),可以创建一个生成器函数来迭代该类文件对象
  • 这样,不必首先在内存中读取所有内容,可以将该生成器函数传递给 StreamingResponse,然后返回它
  • 这包括许多与云存储、视频处理等交互的库

FileResponse 使用异步流式传输文件作为响应,重点一定是异步的

from fastapi import FastAPI
from fastapi.responses import FileResponse

file_path = "test.mp4"
app = FastAPI()

@app.get("/file", response_class=FileResponse)
async def main():
    return file_path

和上面 StreamingResponse 一样,也返回了视频!

RedirectResponse 重定向请求

返回 HTTP 重定向。默认情况下使用 307 状态代码(临时重定向)

from fastapi import FastAPI
from fastapi.responses import RedirectResponse

app = FastAPI()


@app.get("/blog")  
async def redirect_blog():  
    return RedirectResponse("https://www.cnblogs.com/yoyoketang/")
更多推荐

特网科技弹性云服务SSD云硬盘

引言:弹性云服务器是一种基于云计算技术的灵活可扩展的虚拟服务器。它可以根据业务需求来灵活调整服务器的配置,提供更高的可用性和性能。而在弹性云服务器中,云硬盘是一种非常重要的存储设备,它可以提供持久化的数据存储,并且支持多种类型的云硬盘。本文将介绍弹性云服务器使用的云硬盘类型,包括SSD云硬盘、高效云硬盘和普通云硬盘,并

润和软件HopeStage与华宇信息TAS应用中间件完成产品兼容性互认证

近日,江苏润和软件股份有限公司(以下简称“润和软件”)HopeStage操作系统与北京华宇信息技术有限公司(以下简称“华宇信息”)TAS应用中间件软件完成产品兼容性测试。测试结果表明,企业级通用操作系统HopeStageV1.0产品与TAS应用中间件软件产品可以顺利适配、相互良好兼容、稳定运行。这标志着润和软件Hope

小程序中如何查看会员卡的注册时间

会员系统是小程序中非常重要的一部分,可以帮助企业更好地管理客户,并提供更好的服务。在实际应用中,我们经常需要查看会员的注册时间,以便更好地了解客户的行为和需求。本文将介绍小程序如何查看会员的注册时间。1.找到指定的会员卡。在管理员后台->会员管理处,找到需要查看注册时间的会员卡。也支持对会员卡按卡号、手机号和等级进行搜

第十一章:Java集合

目录11.1:java集合框架概述11.2:Collection接口方法11.3:Iterator迭代器接口11.4:Collection子接口一:List11.5:Collection子接口二:Set11.6:Map接口11.7:Collections工具类11.8:增强for循环11.1:java集合框架概述Jav

网络安全(黑客)自学

前言我是去年8月22日才正式学习网络安全的,因为在国营单位工作了4年,在广东一个月工资只有5000块,而且看不到任何晋升的希望,如果想要往上走,那背后就一定要有关系才行。而且国营单位的气氛是你干的多了,领导觉得你有野心,你干的不多,领导却觉得你这个人不错。我才24周岁,实在的受不了这种工作氛围,情绪已经压制了很多久,一

Linux小程序-进度条

进度条我将实现三个版本:1简单原理版本2实际工程实践版本3c语言扩展-设计颜色首先我们需要有一些前置知识:关于行缓冲区和回车换行行缓冲区:c/c++语言会针对标准输出给我们提供默认的缓冲区,这次的角色是输出缓冲区输出的内容不会立马显示,而是放置在输出缓冲区内,只有当缓冲区刷新时我们才会看到输出的内容,而我们平时打印内容

腾讯云16核服务器性能测评_轻量和CVM配置大全

腾讯云16核服务器配置大全,CVM云服务器可选择标准型S6、标准型SA3、计算型C6或标准型S5等,目前标准型S5云服务器有优惠活动,性价比高,计算型C6云服务器16核性能更高,轻量16核32G28M带宽优惠价3468元15个月,腾讯云服务器网分享腾讯云16核CPU服务器可以选择的云服务器CVM规格列表:目录腾讯云16

七天学会C语言-第五天(函数)

1.调用有参函数有参函数是一种接受输入参数(参数值)并执行特定操作的函数。通过向函数传递参数,你可以将数据传递给函数,让函数处理这些数据并返回结果。例1:编写一程序,要求用户输入4个数字,输出前两个数中的最大数、后两个数中的最大数以及四个数中的最大数。#include<stdio.h>doublemax(doublex

jmeter学习文档

JMeter学习(一)工具简单介绍一、JMeter介绍ApacheJMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序)。它可以用来测试静态和动态资源的性能,例如:静态文件,JavaServlet,CGIScripts,JavaObject,数据库和FTP服务器等等

【深度学习实验】线性模型(五):使用Pytorch实现线性模型:基于鸢尾花数据集,对模型进行评估(使用随机梯度下降优化器)

目录一、实验介绍二、实验环境1.配置虚拟环境2.库版本介绍三、实验内容0.导入库1.线性模型linear_model2.损失函数loss_function3.鸢尾花数据预处理4.初始化权重和偏置5.优化器6.迭代7.测试集预测8.实验结果评估9.完整代码一、实验介绍线性模型是机器学习中最基本的模型之一,通过对输入特征进

计算机组成原理——基础入门总结(二)

上一期的路径:基础入门总结(一)目录一.输入输出系统和IO控制方式二.存储系统的基本概念三.cache的基本概念和原理四.CPU的功能和基本结构五.总线概述一.输入输出系统和IO控制方式IO设备又可以被统一称为外部设备~IO接口:由被称为IO控制器、设备控制器:负责协调主机与外部设备之间的数据传输。IO控制器具有统一的

热文推荐