首页 > 编程语言 >python系列:FastAPI系列 10-路由管理APIRouter

python系列:FastAPI系列 10-路由管理APIRouter

时间:2024-06-09 23:33:52浏览次数:26  
标签:username 10 系列 users APIRouter FastAPI py router

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.pyusers.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路由,以实现大型应用程序的模块化结构。







lzq599220

FastAPI系列 10-路由管理APIRouter

标签:username,10,系列,users,APIRouter,FastAPI,py,router
From: https://blog.csdn.net/weixin_54626591/article/details/139420628

相关文章

  • 【攻防技术系列+权限维持】①
    这种方式我觉得挺好用的,且不需要管理员权限,我们都知道lnk文件可以指向一个exe文件,相当于一个快捷方式,所以我们可以更改指向的文件,指向我们的exe文件,但是这样的话原本的lnk文件就没用了,所以我们可以CreateShortcut方法来创建lnk快捷方式,在不损坏其原始lnk文件的情况下且可以执行我......
  • 【华为OD】D卷真题100分:数组拼接 JavaScript代码实现[思路+代码]
    【华为OD】2024年C、D卷真题集:最新的真题集题库C/C++/Java/python/JavaScript【华为OD】2024年C、D卷真题集:最新的真题集题库C/C++/Java/python/JavaScript-CSDN博客JS、Java、C、C++、python代码实现:【华为OD】D卷真题100分:数组拼接JavaScript代码实现[思路+代码]-CSDN......
  • 屏幕录制TechSmith Camtasia 2024 v24.0.0.1041 中文破解版2024最新免费版
    camtasia2024是由美国TechSmith公司出品的一款屏幕录制及视频编辑软件,其包含了屏幕录像、视频剪辑和编辑、视频录音配音、视频菜单制作、视频剧场和视频播放等功能,可以将多种格式的图像、视频剪辑连接成电影,支持输出AVI、MP4、GIF、RM、WMV、MOV等常见格式,并可将电影文件打包成......
  • AI菜鸟向前飞 — LangChain系列之十七 - 剖析AgentExecutor
    AgentExecutor顾名思义,Agent执行器,本篇先简单看看LangChain是如何实现的。    先回顾AI菜鸟向前飞—LangChain系列之十四-Agent系列:从现象看机制(上篇)AI菜鸟向前飞—LangChain系列之十五-Agent系列:从现象看机制(中篇)一个Agent的“旅行”AI菜鸟向前飞—Lang......
  • 请编写函数fun,它的功能是:求出1到100之内能被7或者11整除,但不能同时被7和11整除的所有
    //请编写函数fun,它的功能是:求出1到100之内能被7或者11整除,但不能同时被7和11整除的所有整数,并将他们放在a所指的数组中,通过n返回这些数的个数。#include<stdio.h>intfun(int*a){intresult[100];intcount=0;for(inti=1;i<=100;i++){......
  • Spring Boot入坑-10-Git
    简介一个开源的分布式版本控制系统基于Git协议的代码托管平台主要有Github和Gitlab,国内的也有比如Gitee比较多的企业使用Gitlab构建自己的代码托管平台其主要作用是,对代码或文档进行版本化记录与控制主要概念工作区:个人电脑中能看到的项目的目录暂存区:数据暂......
  • Java JVM——10.对象实例化、内存布局与访问定位
    对象实例化对象创建方式★ new:最常见的方式、单例类中调用getInstance的静态类方法,XXXFactory的静态方法。★ Class的newInstance方法:在JDK9里面被标记为过时的方法,因为只能调用空参构造器。★ Constructor的newInstance(Xxx):反射的方式,可以调用空参的,或者带......
  • seaborn常用的10种数据分析图表
    内置示例数据集seaborn内置了十几个示例数据集,通过load_dataset函数可以调用。其中包括常见的泰坦尼克、鸢尾花等经典数据集。#查看数据集种类importseabornassnssns.get_dataset_names()importseabornassns#导出鸢尾花数据集data=sns.load_dataset('ir......
  • 【Docker系列】跨平台 Docker 镜像构建:深入理解`--platform`参数
    ......
  • CMake:构建、打包和测试的跨平台工具系列软件
    介绍CMake是一个开源、跨平台的构建系统,旨在管理软件构建过程。它通过使用简洁的脚本语言描述项目的构建规则,自动生成适用于各种平台的构建文件,如UnixMakefiles、VisualStudio项目和Xcode项目。CMake不仅支持多种编译器和操作系统,还提供了丰富的功能,用于软件的构建、打包和......