flaskapi 路由管理APIRouter
前言
开发一个应用程序或API,不会将所有的代码都放到main.py文件中。Flask 使用蓝图(BluePrint)来管理路由,FastAPI 提供了一个类似的工具APIRouter。
路由管理
1、fastapi 项目目录层级
2、api/cms/user.py 定义 API 路由和处理函数。实例化 APIRouter 类 ,参数 prefix 添加路由前缀,tags 添加接口文档分类。
prefix 和 tags 这俩个参数也可以在注册路由的时候定义。
from fastapi import APIRouter,Request,Query
user = APIRouter()
# user = APIRouter(prefix='/ai', tags=['user'])
@user.get('/test')
async def test(roleName: str = Query(None)):
# 请求url:http://127.0.0.1:8000/test?roleName=admin
return {'message': roleName}
@user.get('/pro/{id}')
async def test(id: int = None ):
# 请求url:http://127.0.0.1:8000/test/10
return {'message': roleName}
@user.post('/dev')
async def dev(data: dict):
# 请求body数据验证为dict
return {'message': data}
3、在 main.py 模块,注册 api/cms/user.py 里的 user 对象
from api.user import user
from fastapi import FastAPI
import uvicorn
app = FastAPI()
@app.get("/home")
async def get():
return {'message':'OK'}
# 也可以在这里 定义 prefix 和 tags
app.include_router(user,prefix='/ai', tags=['user'])
# 注册user对象
# app.include_router(user)
if __name__ == "__main__":
uvicorn.run(app='main:app', host="0.0.0.0", log_config='./uvicorn_config.json', port=8000)
4、路由也可以单独写在routers文件夹(routers/cms.py),好处是项目层级清晰,可读性强,路由都存放一个地方,方便管理
from fastapi import APIRouter
from api.cms.user import user
cms = APIRouter()
cms.include_router(user, prefix='/ai', tags=['user'])
routers/__init__.py 定义注册路由
from .cms import cms
from fastapi import FastAPI
# 注册路由
def register_router(app: FastAPI):
app.include_router(cms)
# app.include_router(cms, prefix='/ai', tags=['user'])
main.py 调用注册路由方法
from routers import register_router
from fastapi import FastAPI
import uvicorn
app = FastAPI()
@app.get("/home")
async def get():
return {'message':'OK'}
# 调用注册路由方法
register_router(app)
if __name__ == "__main__":
uvicorn.run(app='main:app', host="0.0.0.0", log_config='./uvicorn_config.json', port=8000)
然后启动服务
swagger文档: http://127.0.0.1:8000/docs
redoc文档:http://127.0.0.1:8000/redoc
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2018-08-13 pip解决超时问题(timeout)