FastApi-18-APIRouter

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

Part1背景

通常在我们开发 app 时都会用到路由,像 FlaskblueprintDjangourls 等,其目的都是为了路由汇总管理。FastApi 也不例外,其拥有 APIRouter。今天我们就一起来了解 APIRouter 是如何使用的。

Part2项目结构

项目目录

项目目录

以上,model 为模型层,templateshtml 模板,views 为视图(其中每个视图都有其独立的路由器),mainapp 入口,所有的 APIRouter 都在这里注册。

Part3代码

1视图中路由器的定义和使用

views目录中user.py

from fastapi import FastAPI,Depends,Header,HTTPException,APIRouter
from starlette.requests import Request
from starlette.templating import Jinja2Templates
from starlette import status
import uvicorn
from deta import Deta
from fastapi.responses import StreamingResponse

# 实例化路由器
router = APIRouter()
templates = Jinja2Templates('templates')

# 注意,视图这里使用router来声明请求方式&URI
@router.get('/users/')
def user_list():

    return "这是用户们"

@router.get('/imgs/')
def img_list():
    return "这是图片"
复制代码

2main 中的路由器注册

from fastapi import Depends, FastAPI
from views import utm,openstack,user
from views.utm import login_required
import uvicorn

# 如果需要开启app鉴权,则用这种方式↓
# app = FastAPI(dependencies=[Depends(login_required)])

app = FastAPI() # 免鉴权

app.include_router(
    user.router,
    prefix='/um',
    tags=['um'],
    responses={520: {"description": "I'm a user description!"}}
    )

@app.get("/")
async def root():
    return {"message": "Welcome to Applications APIRouter!"}

if __name__ == "__main__":
    uvicorn.run(app='main:app',host='127.0.0.1',port=8765,reload=True)
复制代码

3浏览器访问

根路由

根路由

um路由到users

um路由到users

um路由到imgs

um路由到imgs

4将图片展示出来

眼尖的同学可能已经注意到,上面对于图片的展示是用文字来替代的,那怎么样将图片展示出来呢?答案是用 FastApi 中的 StreamingResponse 对象来进行响应。

@router.get('/imgs/')
def img_list():
    #return "这是图片"
    file_like = open('templates/baidu.png', mode="rb")
    return StreamingResponse(file_like, media_type="image/jpg")
复制代码

再次访问:localhost:8765/um/imgs/

可以看到,图片他已经成功展示。

怎么样,简单吧,你学废了吗?

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

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享