当前位置:   article > 正文

FastAPI系列 10-路由管理APIRouter_fastapi 路由管理

fastapi 路由管理

FastAPI系列 10-路由管理APIRouter


前言

在fastapi 中也有类似的功能通过APIRouter 来管理


一、路由管理 APIRouter

正在开发一个应用程序或 Web API,很少会将所有的内容都放在一个文件中。FastAPI 提供了一个方便的工具,可以在保持所有灵活性的同时构建你的应用程序。

├── fastapi
│   ├── __init__.py
│   ├── main.py
│   └── routers
│   │   ├── __init__.py
│   │   ├── users.py
│   │   └── books.py
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

专门用于处理书逻辑的文件是位于 /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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

此模块中的所有路径操作都有相同的:

  • 路径 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}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

二、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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

启动服务,访问Docs文档,生成的APi交互

在这里插入图片描述

总结

主要介绍了在FastAPI框架中如何利用APIRouter来组织和管理不同的API路由,以实现大型应用程序的模块化结构。

更多内容,请关注公众号,更有免费测试开发课程相送 +V lzq5599220

在这里插入图片描述
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/535330
推荐阅读
  

闽ICP备14008679号