赞
踩
在fastapi 中也有类似的功能通过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
此模块中的所有路径操作都有相同的:
修改代码如下:
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/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路由,以实现大型应用程序的模块化结构。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。