FastApi-19-高级用法

959 阅读2分钟

这是我参与8月更文挑战的第19天,活动详情查看:8月更文挑战

自定义响应码

基础

有些时候,我们需要不同的响应码来处理不同的业务需求,此时我们就需要自定义响应码。

from fastapi import status
from fastapi.responses import JSONResponse

app = FastAPI()

@app.get("/")
async def root():
    return JSONResponse(status_code=status.HTTP_300_MULTIPLE_CHOICES,content={"message": "Welcome to Applications APIRouter!"})

自定义响应码

如上,我们自定义了 300 响应码来处理当前请求。

进阶

FastApi 为我们提供了一种在视图内根据某些条件修改响应码的方法,可以方便开发者灵活的进行响应码的设置。

from fastapi import Response

@app.get("/{code}")
async def root(code,rep:Response):
    if code == "200":
        rep.status_code=200
    else:
        rep.status_code=333
    return {"message": "Welcome to Applications APIRouter!"}

code=200 时

code=200

code!=200 时

code!=200

自定义响应体

很多时候,我们需要向前端返回不同类型的响应体,此时我们需要借助 FastApi 为我们提供的各种响应体。

前面,我们已经使用了关于图片的响应体 StreamingResponse,今天我们继续了解其他类型。

JSONResponse

from fastapi import status
from fastapi.responses import JSONResponse

app = FastAPI()

@app.get("/")
async def root():
    return JSONResponse(status_code=status.HTTP_300_MULTIPLE_CHOICES,content={"message": "Welcome to Applications APIRouter!"})

JSONResponse

HTMLResponse

通过 HTMLResponse,我们可以直接将 HTML 文本直接发送到前端进行渲染,从而实现前后端合一,在小型系统中很有用。大型系统通常采用前后端分离。

from fastapi import status
from fastapi.responses import HTMLResponse

app = FastAPI()

@app.get("/")
async def root():
    return HTMLResponse(status_code=status.HTTP_300_MULTIPLE_CHOICES,content="<hr><h1>我是HTMLResponse!<h1>")

HTMLResponse

FileResponse

对于文件的预览和展示,下载等,我们都可以用这种响应类型。之前我们已经了解过对于图片我们也可以使用 StreamingResponse 这种类型。

from fastapi import status
from fastapi.responses import FileResponse

app = FastAPI()

@app.get("/")
async def root():
    return FileResponse(status_code=status.HTTP_202_ACCEPTED,path="templates/baidu.png")

FileResponse

更多类型

通过查看 fastapi.responses 的源码,我们可以知道,FastApi 为我们提供了以下 8 中常用的响应体类型。

FastApi的响应体类型

针对不同类型的数据,我们需要选择合适的响应体进行响应。

感谢您的阅读,别忘了关注,点赞,评论,转发四连哟!