FastAPI系列 4 -路由管理APIRouter

FastAPI系列 -路由管理APIRouter

文章目录

一、前言

未来的py开发者请上座,在使用python做为后端开发一个应用程序或 Web API,很少会将所有的内容都放在一个文件中。FastAPI 提供了一个方便的工具,可以在保持所有灵活性的同时构建你的应用程序。

二、APIRouter使用示例

1、功能拆分

功能:在Web输入Url返回数据,但需要使用在users、books中定义的API

python 复制代码
├── fastapi
│   ├── __init__.py
│   ├── main.py
│   └── routers
│   │   ├── __init__.py
│   │   ├── users.py
│   │   └── books.py

app 目录包含了所有内容。并且它有一个空文件 app/init.py,它包含一个 app/main.py 文件。

routers 目录下有 books.pyusers.py 2个文件。

项目目录层级如下:

2、users、books模块开发

专门用于处理用户逻辑的文件是位于 /fastapi/routers/users.py 的子模块

users.py

python 复制代码
# -*- coding:utf-8 -*-
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 的子模块

books.py

python 复制代码
# -*- coding:utf-8 -*-
from fastapi import APIRouter


router=APIRouter()

@router.get('/books', tags=["books"])
async def create_book(book):
    result={"book":book}
    return result

@router.get('/getbooks', tags=["books"])
async def get_book():
    result=[{"book":'测试1'},{'book':'测试2'}]
    return result

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

  • 路径 prefix:路径前缀 /users。
  • tags:(仅有一个 users 标签)。
  • responses: 定义响应状态码
  • dependencies:依赖项。

3、FastAPI主体

main.py

python 复制代码
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,port=15341)

三、运行结果

uvicorn启动FastAPI后端

运行main.py

返回页面

启动服务,访问http://127.0.0.1:15341/docs,生成的APi交互文档

相关推荐
寻星探路1 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
曹牧3 小时前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
爬山算法4 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
七夜zippoe4 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
盟接之桥4 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
kfyty7254 小时前
集成 spring-ai 2.x 实践中遇到的一些问题及解决方案
java·人工智能·spring-ai
猫头虎4 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
李少兄4 小时前
在 IntelliJ IDEA 中修改 Git 远程仓库地址
java·git·intellij-idea
忆~遂愿5 小时前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能
小韩学长yyds5 小时前
Java序列化避坑指南:明确这4种场景,再也不盲目实现Serializable
java·序列化