FastAPI系列 10-路由管理APIRouter
FastAPI系列 10-路由管理APIRouter
前言
在fastapi
中也有类似的功能通过APIRouter
来管理
一、路由管理 APIRouter
正在开发一个应用程序或 Web API
,很少会将所有的内容都放在一个文件中。FastAPI
提供了一个方便的工具,可以在保持所有灵活性的同时构建你的应用程序。
├── fastapi
│ ├── __init__.py
│ ├── main.py
│ └── routers
│ │ ├── __init__.py
│ │ ├── users.py
│ │ └── books.py
app 目录
包含了所有内容。并且它有一个空文件 app/init.py
,它包含一个 app/main.py
文件。
routers 目录
下有 books.py
和 users.py
2个文件。
项目目录层级如下:
专门用于处理用户逻辑的文件是位于 /fastapi/routers/users.py
的子模块
from fastapi import APIRouter
router = APIRouter()
# 获取用户列表
@router.get("/users/", tags=["users"])
async def read_users():
return [{"username": "Teacher Li"}, {"username": "Teacher Tom"}]
# 获取个人详情
@router.get("/users/one", tags=["users"])
async def read_user_me():
return {"username": "Teacher Li", "phone_number": "0123456789"}
# 获取用户名称
@router.get("/users/{username}", tags=["users"])
async def read_user(username: str):
return {"username": username}
专门用于处理书逻辑的文件是位于 /fastapi/routers/books.py
的子模块
from fastapi import Body, FastAPI, APIRouter
from pydantic import BaseModel, Field
router = APIRouter()
app = FastAPI()
class Book(BaseModel):
book_name: str
description: str = Field(None,
title="The description of the user",
max_length=100)
price: float = Field(...,
gt=0,
description="The price of the book")
@router.post("/books/", tags=["books"])
async def create_book(book: Book = Body(..., embed=True)):
results = {"book": book}
return results
此模块中的所有路径操作都有相同的:
-
路径 prefix:路径前缀 /users。
-
tags:(仅有一个 users 标签)。
-
responses: 定义响应状态码
-
dependencies:依赖项。
修改代码如下:
from fastapi import APIRouter
router = APIRouter(
prefix="/users",
tags=["users"],
responses={404: {"description": "Not found"}},
)
# 获取用户列表
@router.get("/")
async def read_users():
return [{"username": "Teacher Li"}, {"username": "Teacher Tom"}]
# 获取个人详情
@router.get("/one")
async def read_user_me():
return {"username": "Teacher Li", "phone_number": "0123456789"}
# 获取用户名称
@router.get("{username}")
async def read_user(username: str):
return {"username": username}
二、FastAPI 主体
来看看位于 fastapi/main.py
的模块。在这里你导入并使用 FastAPI 类
。
import uvicorn
from fastapi import Depends, FastAPI
from routers import books, users
app = FastAPI()
app.include_router(users.router)
app.include_router(books.router)
@app.get("/")
async def root():
return {"message": "Hello Bigger Applications!"}
if __name__ == '__main__':
uvicorn.run(app)
启动服务,访问Docs文档
,生成的APi交互
总结
主要介绍了在FastAPI框架
中如何利用APIRouter
来组织和管理不同的API路由
,以实现大型应用程序的模块化结构。
标签:username,10,系列,users,APIRouter,FastAPI,py,router From: https://blog.csdn.net/weixin_54626591/article/details/139420628