Python|fastapi输出定制(四)

随着fastapi学习的深入,渐渐的不满足返回json这种格式,想要url重定向怎么办?想输出纯文本怎么办?想直接返回一个文件怎么办?这节来回答这些问题
直接查看fastapi.responses的源码,我们看到以下定义好的返回类型

from starlette.responses import FileResponse  # noqa
from starlette.responses import HTMLResponse  # noqa
from starlette.responses import JSONResponse  # noqa
from starlette.responses import PlainTextResponse  # noqa
from starlette.responses import RedirectResponse  # noqa
from starlette.responses import Response  # noqa
from starlette.responses import StreamingResponse  # noqa
from starlette.responses import UJSONResponse  # noqa


下面,开始我们的表演

URL重定向

用nginx来搞的话,一般配置301或者302,不过fastapi返回HTTP重定向,默认状态码为307(临时重定向)。

from fastapi import FastAPI
from fastapi.responses import RedirectResponse

app = FastAPI()

@app.get("/blog")
go_to_blog():
    return RedirectResponse("https://blog.cnrainbird.com")

curl查看

curl -I -XGET http://0.0.0.0:8001/blog
HTTP/1.1 307 Temporary Redirect
date: Sat, 17 Oct 2020 07:52:01 GMT
server: uvicorn
location: https://blog.cnrainbird.com
transfer-encoding: chunked

输出纯文本

这次用到的是PlainTextResponse,直接打印个Hello world吧

from fastapi import FastAPI
from fastapi.responses import PlainTextResponse

app = FastAPI()

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

输出文件

这次选手叫:FileResponse异步流式输出一个文件。
不同于其他返回,FileResponse可以传入更多参数:

path       - 文件路径
headers    - 定制头信息,字典格式
media_type - media type,如果没有设置则会根据文件名或文件路径来推断media type
filename   - 文件名。如果设置,会被包含到response的Content-Disposition中

文件response会包含合适的Content-Length, Last-Modified 以及 ETag 头信息内容。

示例

from fastapi import FastAPI
from fastapi.responses import FileResponse

some_file_path = "large-video-file.mp4"
app = FastAPI()

@app.get("/")
def main():
    return FileResponse(some_file_path)

定制默认类

比如,我们不想每次return时都再写类型,想直接全局定义返回文本怎么呢?

from fastapi import FastAPI
from fastapi.responses import PlainTextResponse

app = FastAPI(default_response_class=PlainTextResponse)

@app.get("/")
def main():
    return "Hello World"

结语

还有一些其它的类型,大同小异,不一一演示了.弄了一个微信群欢迎正常学习fastapi的朋友扫码加入.
fastapi

转载请注明: 转自Rainbird的个人博客
   本文链接: Python|fastapi输出定制(四)


相关博文

About rainbird

IOS攻城狮
This entry was posted in Python and tagged , , , , , , , , . Bookmark the permalink.

发表评论