FastAPI 学习之路(三十六)引入APIRouter

本次调整后的目录如下:

我们可以使用APIRouter来声明路径操作,我们先看下如何去使用。

 我们根据选择划分为users和items来细分。

具体实现如下:

①先看items实现

from fastapi import APIRouter
from fastapi import Depends
from models.crud import *item_router = APIRouter()
from . import create_db@item_router.post("/items/{uid}", response_model=ItemOut)
def create_item_by_user(uid: int, item: ItemModel, db: Session = Depends(create_db)):return create_item_by_user_method(db, uid, item)@item_router.get("/items", response_model=List[ItemOut])
def get_items(skip: int = 0, limit: int = 10, db: Session = Depends(create_db)):return get_items_method(db, skip, limit)@item_router.get("/items/{uid}", response_model=List[ItemOut])
def get_items_by_uid(uid: int, db: Session = Depends(create_db)):return get_items_by_uid_method(db, uid)

下面是users的实现方式

from fastapi import APIRouter
from fastapi import Depends
from models.crud import *user_router = APIRouter()
from . import create_db@user_router.post("/user", response_model=UserOut)
def create_user(user: UserModel, db: Session = Depends(create_db)):return create_user_method(db, user)@user_router.get("/user", response_model=UserOut)
def get_user(uid: int, db: Session = Depends(create_db)):return get_user_method(db, uid)

我们最后看下main文件 

from fastapi import FastAPI
from routers.users import user_router
from routers.items import item_routerapp = FastAPI()
app.include_router(user_router)
app.include_router(item_router)if __name__ == '__main__':import uvicornuvicorn.run("main:app", reload=True)

其中,我们暂时把create_db方法提取到__init__.py中,否则会引起循环引用的错误,如下:

from models.database import SessionLocaldef create_db():"""每个请求处理完毕后关闭当前连接,不同的请求使用不同的链接"""db = SessionLocal()try:yield dbfinally:db.close()

 重新启动我们的服务,测试下是否可以

我们的接口请求还是正确的,证明我们的改造是没有问题的。

如果想要给每一个路由都加一个通用的路径前缀标识,并且每个都有对应的tag,如下即可实现:

app.include_router(user_router, prefix="/u", tags=["users"])
app.include_router(item_router, prefix="/i", tags=["items"])

我们看下最后的接口是否增加了对应的前缀才可以访问

没有问题,根据我们的改造方式没有问题,那么tags如何看到效果呢?如下:

在复杂的应用上,我们可以根据不同模块,创建对应的路径操作。当然,我们在参数中还可以传递对应的依赖。

我们可以看下使用的方法,里面有很多参数,我们是可以传递的,具体的可以根据自己的需要进行传递。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/44223.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity AssetsBundle 详解

文章目录 1.AssetBundle 概念2.AssetBundle 优势3.AssetBundle 特性4.AssetBundle 使用流程4.1 分组4.2 打包4.3 加载包4.4 加载资源4.5 卸载资源 5.AssetBundleManifest6.AssetBundle的内存占用7.AB包资源加密 1.AssetBundle 概念 AssetBundle又称AB包,是Unity提供…

如何用Vue3和Plotly.js创建交互式表格?

本文由ScriptEcho平台提供技术支持 项目地址:传送门 Plotly.js 动态生成 HTML 表格 应用场景介绍 在数据分析和可视化领域,经常需要以表格的形式展示数据。Plotly.js 是一款功能强大的 JavaScript 库,不仅可以创建交互式图表,…

基于Java的飞机大战游戏的设计与实现论文

点击下载源码 基于Java的飞机大战游戏的设计与实现 摘 要 现如今,随着智能手机的兴起与普及,加上4G(the 4th Generation mobile communication ,第四代移动通信技术)网络的深入,越来越多的IT行业开始向手机…

【SVN-CornerStone客户端使用SVN-多人开发-解决冲突 Objective-C语言】

一、接下来,我们来说第三方的图形化界面啊, 1.Corner Stone:图形化界面,使用SVN, Corner Stone的界面,大概就是这样的, 1)左下角:是我们远程的一个仓库, 2)右上角:是我们本地的一些东西, 首先,在我的服务器上,再开一个仓库,叫做wechat, 我在这个里边,新建…

用Racket做一个拼图游戏——4 实现工具

4 实现工具 思路理清楚了,接下来就一个一个功能实现。在阐述实现功能的编程过程中,会延伸讲解编程思路、相关的Racket函数及相关知识点,力图达到在实践中的学习目的。 在编程实现过程中,首先实现图片操作功能,再通过…

告别混乱,可道云企业网盘个人标签,让文件管理更轻松

在信息爆炸的时代,你是不是常常觉得自己的大脑就像一台过载的处理器,各种文件、资料、想法在脑海中“打架”,让你焦头烂额? 别担心,可道云企业网盘个人标签功能来拯救你的“大脑内存”了! 我们需要告别无…

求函数最小值-torch版

目标:torch实现下面链接中的梯度下降法 先计算 的导函数 ,然后计算导函数 在处的梯度 (导数) 让 沿着 梯度的负方向移动, 自变量 的更新过程如下 torch代码实现如下 import torchx torch.tensor([7.5],requires_gradTrue) # print(x.gr…

【保姆级教程】CenterNet的目标检测、3D检测、关键点检测使用教程

一、代码下载 仓库地址:https://github.com/xingyizhou/CenterNet?tab=readme-ov-file 二、目标检测 2.1 下载预训练权重 下载预训练权重ctdet_coco_dla_2x.pth放到models文件夹下 下载链接:https://drive.google.com/file/d/18Q3fzzAsha_3Qid6mn4jcIFPeOGUaj1d/edit …

连续6年夺冠 6项细分领域第一,中电金信持续领跑中国银行业IT解决方案市场

7月9日,工信部赛迪顾问发布《2023年度中国银行业IT解决方案市场分析报告》(简称《报告》)。中电金信以7.38%的市场份额再度蝉联2023中国银行业IT解决方案市场份额第一,以显著优势持续领跑中国银行业IT解决方案市场。在细分领域&am…

视频调色的技巧和方法 视频调色的操作步骤 视频调色用什么软件好免费 会声会影下载免费中文版

学会视频调色,就等于掌握了剪辑艺术的密码。视频调色不是为了画面好看,而是通过精心构思的色彩参数,向观众传达作品的情绪和内涵。普通剪辑师与剪辑高手之间的差距,就在于能否领悟视频调色的真谛。 一、视频调色有什么用 掌握混…

MySQL语法笔记(补充版)

补充上一篇博客没涉及到的实用语法 MySQL语法笔记(温习版) 查看正在使用的数据库 SELECT DATABASE()查看时区 show VARIABLES like time_zone修改时区 timestamp类型存储的时间与MySQL数据库系统安装时所选的时区有关,在不同时区下查看的同…

springboot定制化书籍销售系统-计算机毕业设计源码71193

摘要 随着电子商务的快速发展和图书市场的不断变革,定制化书籍销售系统的需求日益凸显。本文介绍了一种基于SpringBoot框架的定制化书籍销售系统的设计与实现。该系统旨在满足用户对于个性化、专业化的书籍需求,为用户提供高效、便捷的定制化购书体验。 …

前端JS特效第27波:jQuery商品放大镜预览代码

jQuery商品放大镜预览代码&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下&#xff1a; <!doctype html> <html lang"zh"> <head> <meta charset"UTF-8"> <meta http-equiv"X-UA-Compatible" content&quo…

结构体案例1

代码 #include <iostream> using namespace std; #include <string> #include <ctime>//学生的结构体 struct Student {string sName;int score; }; //老师的结构体定义 struct Teacher {string tName;struct Student sArray[5]; };//给老师和学生赋值的函数…

zabbix“专家坐诊”第245期问答

问题一 Q&#xff1a;vfs.dev.discovery拿的是哪里的文件&#xff0c;我看源码里面获取的是/proc/parttions里面的信息&#xff0c;但是我没有这个device&#xff0c;是怎么获取出来的&#xff1f; 在这里插入图片描述 A&#xff1a;检查下系统内核版本或者agent程序版本&…

Linux系统升级OpenSSH版本到openssh-9.8p1

1、升级OpenSSH就要对应的升级OpenSSL&#xff0c;所以要同时要准备openssh-9.8p1.tar.gz和openssl-3.3.1.tar.gz 2、将两个压缩包上传到/home/user目录。 3、为了防止ssh安装失败导致无法连接服务器&#xff0c;需要先安装并启动telnet连接协议&#xff0c;命令如下&#xf…

数据库管理 常用函数,处理查询,管理表记录

常用函数 MySQL服务内置命令 语法&#xff1a;函数名(表头名) 可以单独用&#xff0c;也可以镶嵌 select day(now()) select格式: SELECT 函数(表头名) FROM 库名.表名&#xff1b;SELECT 函数(表头名) FROM 库名.表名 WHERE 条件&#xff1b; departments 部门…

安卓腾讯桌球多功能助手直装版

安卓13自测效果&#xff0c;安卓12-安卓12以下一定可以的&#xff0c;QQ登陆的话扫码登陆&#xff0c;两个手机&#xff0c;一个扫码&#xff0c;一个游戏&#xff0c;一个手机的话&#xff0c;你可以下载个虚拟机&#xff0c;然后本机直装&#xff0c;用虚拟机QQ扫码即可 微信…

Web3D技术应用在什么场景,能给企业带来什么价值?

Web3D现在已经在很多行业和领域应用了&#xff0c;以 博维数孪 行业用户为例&#xff0c;它能够为企业带来一系列价值&#xff1a; 1、电商领域&#xff1a;在电商中&#xff0c;Web3D技术可以提供3D商品展示&#xff0c;让消费者能够全面了解商品的每一个细节&#xff0c;并且…

基于与STM32的加湿器之雾化片驱动

基于与STM32的加湿器之雾化片驱动 加湿器是一种由电力驱动&#xff0c;用于增加环境湿度的家用电器。加湿器通过特定的方式&#xff08;如蒸发、超声波振动或加热&#xff09;将水转化为水蒸气&#xff0c;并将这些水蒸气释放到空气中&#xff0c;从而增加空气中的湿度。主要功…