当前位置:   article > 正文

FASTAPI系列 16-其他响应类型_fastapi fileresponse

fastapi fileresponse

FASTAPI系列 16-其他响应类型



前言

返回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("/users/", response_class=HTMLResponse)
async def get_users():
    return """
    <html>
        <head>
            <title>这个是一个HTML网页</title>
        </head>
        <body>
            <h1>这个是一个HTML网页</h1>
        </body>
    </html>
    """
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

二、纯文本响应

可以接受纯文本类型响应,使用PlainTextResponse,在这个例子中,HTTP 头的 Content-Type 会被设置成 text/plain。

@app.get("/says", response_class=PlainTextResponse)
async def main():
    return "Hello World"
  • 1
  • 2
  • 3

三、另外的JSON 响应

除了前面的提到 JSONResponse , 还有另外2个,ORJSONResponse 是一个使用 orjson 的快速的可选 JSON 响应。UJSONResponse 是一个使用 ujson 的可选 JSON 响应。ujjson 必须先安装;在这个例子中,HTTP 头的 Content-Type 会被设置成 application/json。

pip install ujjson
  • 1
@app.get("/hobby/", response_class=UJSONResponse)
async def get_hobby():
    return [{"hobby": "国粹"}]
  • 1
  • 2
  • 3

四、FileResponse文件

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

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

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

@app.get("/files")
async def get_files():
    return FileResponse(path='head_profile.jpg')
  • 1
  • 2
  • 3

五、StreamingResponse

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

file_path = "test.mp4"


@app.get("/videos")
def get_video():
    def iterfile():
        with open(file_path, "rb") as file_like:
            yield from file_like
    return StreamingResponse(iterfile(), media_type="video/mp4")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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

六、RedirectResponse 重定向请求

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

@app.get("/blog")
async def redirect_blog():
    return RedirectResponse("https://blog.csdn.net/lzq599220/article/details/137077376")
  • 1
  • 2
  • 3

总结

FastAPI框架不仅限于返回JSON格式的响应,还支持多种类型的响应以满足不同场景的需求。

更多内容,请关注公众号, 发送666 更可以得到免费课程

在这里插入图片描述

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/689824
推荐阅读
相关标签
  

闽ICP备14008679号