Part1背景
通常在我们开发 app
时都会用到路由,像 Flask
有 blueprint
,Django
有 urls
等,其目的都是为了路由汇总管理。FastApi
也不例外,其拥有 APIRouter
。今天我们就一起来了解 APIRouter
是如何使用的。
Part2项目结构
网络异常,图片无法展示
|
项目目录
以上,
model
为模型层,templates
为html
模板,views
为视图(其中每个视图都有其独立的路由器),main
为app
入口,所有的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路由到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/
网络异常,图片无法展示
|
可以看到,图片他已经成功展示。
怎么样,简单吧,你学废了吗?
感谢您的阅读,别忘了关注,点赞,评论,转发四连哟!