首页 > 其他分享 >FastAPI学习-10. 路由管理APIRouter

FastAPI学习-10. 路由管理APIRouter

时间:2023-10-25 11:01:52浏览次数:46  
标签:10 users APIRouter items app py item FastAPI router

前言

在 Flask 中,我们一般用蓝图 Blueprint 来处理多个模块的视图,在fastapi 中也有类似的功能通过APIRouter 来管理。

路由管理 APIRouter

如果你正在开发一个应用程序或 Web API,很少会将所有的内容都放在一个文件中。
FastAPI 提供了一个方便的工具,可以在保持所有灵活性的同时构建你的应用程序(如果你学过 Flask,那这将相当于 Flask 的 Blueprints)。

假设你的文件结构如下:

├── app
│   ├── __init__.py
│   ├── main.py
│   └── routers
│   │   ├── __init__.py
│   │   ├── items.py
│   │   └── users.py

app 目录包含了所有内容。并且它有一个空文件 app/__init__.py,它包含一个 app/main.py 文件。
routers 目录下有 items.pyusers.py 2个文件。

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

from fastapi import APIRouter

router = APIRouter()


@router.get("/users/", tags=["users"])
async def read_users():
    return [{"username": "Rick"}, {"username": "Morty"}]


@router.get("/users/me", tags=["users"])
async def read_user_me():
    return {"username": "fakecurrentuser"}


@router.get("/users/{username}", tags=["users"])
async def read_user(username: str):
    return {"username": username}

假设你在位于 app/routers/items.py 的模块中还有专门用于处理应用程序中「项目」的端点。
这和 app/routers/users.py 的结构完全相同。
我们知道此模块中的所有路径操作都有相同的:

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

因此,我们可以将其添加到 APIRouter 中,而不是将其添加到每个路径操作中。

from fastapi import APIRouter, Depends, HTTPException

router = APIRouter(
    prefix="/items",
    tags=["items"],
    responses={404: {"description": "Not found"}},
)


fake_items_db = {"plumbus": {"name": "Plumbus"}, "gun": {"name": "Portal Gun"}}


@router.get("/")
async def read_items():
    return fake_items_db


@router.get("/{item_id}")
async def read_item(item_id: str):
    if item_id not in fake_items_db:
        raise HTTPException(status_code=404, detail="Item not found")
    return {"name": fake_items_db[item_id]["name"], "item_id": item_id}


@router.put(
    "/{item_id}",
    tags=["custom"],
    responses={403: {"description": "Operation forbidden"}},
)
async def update_item(item_id: str):
    if item_id != "plumbus":
        raise HTTPException(
            status_code=403, detail="You can only update the item: plumbus"
        )
    return {"item_id": item_id, "name": "The great Plumbus"}

FastAPI 主体

现在,让我们来看看位于 app/main.py 的模块。在这里你导入并使用 FastAPI 类。

from fastapi import Depends, FastAPI
from .routers import items, users

app = FastAPI()


app.include_router(users.router)
app.include_router(items.router)


@app.get("/")
async def root():
    return {"message": "Hello Bigger Applications!"}



标签:10,users,APIRouter,items,app,py,item,FastAPI,router
From: https://blog.51cto.com/u_15249893/8015597

相关文章

  • FastAPI学习-11. 请求body - 嵌套模型
    前言使用 FastAPI,你可以定义、校验、记录文档并使用任意深度嵌套的模型(归功于Pydantic)List字段你可以将一个属性定义为拥有子元素的类型。例如Python list:fromtypingimportUnionfromfastapiimportFastAPIfrompydanticimportBaseModelapp=FastAPI()classIte......
  • centos7安装Docker(2023/10/24)
    centos7安装Docker(2023/10/24)一、安装前必读系统配置方面,这里使用的是Centos7Linux内核:官方建议3.10以上。注意:本文的命令使用的是root用户登录执行,非root用户所有命令前面要加sudo1.查看当前的内核版本1uname-r如图为3.10,满足条件。 2.使用root权限更......
  • VeRA: 性能相当,但参数却比LoRA少10倍
    2022年的LoRA提高了微调效率,它在模型的顶部添加低秩(即小)张量进行微调。模型的参数被冻结。只有添加的张量的参数是可训练的。与标准微调相比,它大大减少了可训练参数的数量。例如,对于Llama27b,LoRA通常训练400万到5000万个参数,这比标准微调则训练70亿个参数药效的多。还可以使......
  • [Leetcode] 0101. 对称二叉树
    101.对称二叉树题目描述给你一个二叉树的根节点root,检查它是否轴对称。 示例1:输入:root=[1,2,2,3,4,4,3]输出:true示例2:输入:root=[1,2,2,null,3,null,3]输出:false 提示:树中节点数目在范围[1,1000]内-100<=Node.val<=100 进阶:你可以运用递......
  • PAT_A1101 Quick Sort
    Thereisaclassicalprocessnamed partition inthefamousquicksortalgorithm.Inthisprocesswetypicallychooseoneelementasthepivot.Thentheelementslessthanthepivotaremovedtoitsleftandthoselargerthanthepivottoitsright.Given ......
  • 20231024学习总结
    Java抽象类在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式......
  • 10.24
    今天学习了使用mybatis通过注解的方式实现对数据库最基本的增删改查定义了一个Emp的类对象Emp.javapackagecom.itheima.mybatisdatabaseexample.pojo;importlombok.AllArgsConstructor;importlombok.Data;importlombok.NoArgsConstructor;importjava.time.LocalDat......
  • fastapi + strawberry(graphql)
    Strawberryhttps://fastapi.tiangolo.com/zh/how-to/graphql/GraphQLwithStrawberry¶IfyouneedorwanttoworkwithGraphQL,StrawberryistherecommendedlibraryasithasthedesignclosesttoFastAPI'sdesign,it'sallbasedontypeannotat......
  • pytorch(10.2) 自注意力理论 固定C变化到可变C
     1早先的预测模型让我们首先定义预测函数来生成prefix之后的新字符,其中的prefix是一个用户提供的包含多个字符的字符串。在循环遍历prefix中的开始字符时,我们不断地将隐状态传递到下一个时间步,但是不生成任何输出。这被称为预热(warm-up)期,因为在此期间模型会自我更新(例如,更......
  • 《动手学深度学习 Pytorch版》 10.3 注意力评分函数
    上一节使用的高斯核的指数部分可以视为注意力评分函数(attentionscoringfunction),简称评分函数(scoringfunction)。后续把评分函数的输出结果输入到softmax函数中进行运算。最后,注意力汇聚的输出就是基于这些注意力权重的值的加权和。该过程可描述为下图:用数学语言描述为:\[f(\b......