FastAPI Web框架教程 第10章 APIRouter

10-1 APIRouter基本使用

需求场景

如果我们写一个网站,或者写一个APP,那整个项目应该是比较复杂的,此时不应该把所有代码放在一个文件中。

前几节课,我们通过把代码拆分到不同文件的方式,可以解决一些代码混乱的问题,但是却不能更好的解决。

比如一个项目中可能含有不同的模块,那不同的模块应该分开管理,这样项目才便于维护和管理。

FastAPI的解决方式

APIRouter就是FastAPI为了此需求场景提供了一种解决方式,它类似 Flask中的蓝图,Django中的app

示例1:APIRouter的基本使用

  • main.py 非常简洁,主要负责注册管理
  • 使用 app.include_router(blog.router, prefix="/blog", tags=["Blog"]) 注册模块,同时可以指定及api的前缀(prefix)和标签(tags)
from fastapi import FastAPI
from routers import blog, user

app = FastAPI()
app.include_router(blog.router, prefix="/blog", tags=["Blog"])
app.include_router(user.router)
  • routers/blog.py 主要负责和blog模块有关的业务
  • router = APIRouter()得到的 router对象和main.py中的app对象使用方式一样
from fastapi import APIRouter

router = APIRouter()


@router.get("/blogs")
def blogs():
    return [{"id": i, "title": f"blog{i}"} for i in range(10)]


@router.get("/{blog_id}")
def get_blog(blog_id: int):
    return {"id": blog_id, "title": f"blog{blog_id}"}


@router.delete("/{blog_id}")
def delete(blog_id: int):
    return {"code": 1, "msg": f"Done blog_id: {blog_id}"}
  • routers/user.py,负责和用户相关的模块
from fastapi import APIRouter, Form


router = APIRouter(tags=["User"], prefix="/user")


@router.post("/login")
def login(name: str = Form(), pwd: str = Form()):
    return {"name": name}


@router.get("/me")
def info():
    return {"info":  "this is a cute boy"}

10-2 APIRouter集成到Blog_app项目

  • 见源码 blog_app

补充:数据库中 blog建表sql

use db;		-- 使用名字为 db 的数据库

CREATE TABLE `blogs` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `title` varchar(255) NOT NULL,
    `body` TEXT,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin AUTO_INCREMENT=1 ;
  • 项目结构

在这里插入图片描述

  • api文档
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SD-WAN帮助企业实现对分布式网络的集中管理和控制

在当今数字化时代,企业网络越来越分散和复杂,分布在全球不同地点的分支机构和远程办公地点需要高效的网络连接来支持业务运营。传统的广域网(WAN)架构已经无法满足企业对网络灵活性、可靠性和安全性的需求。而SD-WAN的出现为解决这…

Phpstorm配置Xdebug

步骤 1、先去官网找到对应的php xdebug的版本 2、配置phpstorm断点调试 网址:https://xdebug.org/ 查看php对应的xdebug版本:Xdebug: Support — Tailored Installation Instructions 1.1查看对应php xdebug版本 全选,复制到目标网址 我…

C++要点细细梳理(上)(函数与面向对象)

之前我们讨论了C语言一些基础的细节,下面我们开始讨论C,,后面我打算接着谈C,也就是C#,先在此留个坑。 注意,本文有素材来自中国大学MOOC的C课程,本文也是该课程的听课笔记【这是链接】 1. 从C…

【HarmonyOS】ArkUI - 动画

利用属性动画、显示动画、组件转场动画实现组件动画效果。 一、属性动画 属性动画是通过设置组件的 animation 属性来给组件添加动画,当组件的 width、height、Opacity、backgroundColor、scale、rotate、translate 等属性变更时,可以实现渐变过渡效果。…

模块化编程:AMD 和 CMD 的魅力

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

力扣刷题部分笔记

Leetcode 力扣刷题笔记,记录了几个月来的题目记录,将会继续保持刷题~ 2024.01 1768.交替合并字符串 创建字符串不需要声明长度(动态分配内存),push_back()可以加入某个字符,append()一般用于添加字符串…

js的qq换肤效果

文章目录 1. 演示效果2. 分析思路3. 代码实现3.1. 方式一3.2. 方式二3.3. 整体代码 1. 演示效果 2. 分析思路 先编写样式,弄好布局和排版。遍历这个集合,对每个图片元素(img)添加一个点击事件监听器。可以使用 for 或者 forEach …

IT外包服务:企业数据资产化加速利器

随着数字化时代的兴起,数据成为企业最为重要的资源之一。数据驱动创新对于企业的竞争力和可持续发展至关重要。在这一进程中,IT外包服务发挥着关键作用,加速企业数据资产化进程,为企业提供了重要支持。 首先,IT外包服务…

c++11 标准模板(STL)本地化库 - 平面类别 - (std::ctype) 定义字符分类表(四)

本地化库 本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析&#xff0c;以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C 标准库的其他组件的行为。 平面类别 定义字符分类表 std::ctype template< class CharT > clas…

计算机网络(五) 传输层

传输层 一、传输层概述二、TCP1.报文段格式2.连接管理3.可靠传输4.流量控制5.拥塞控制 三、UDP1.报文段格式2.校验 一、传输层概述 从通信和信息处理的角度看&#xff0c;传输层向它上面的应用层提供通信服务&#xff0c;它属于面向通信部分的最高层&#xff0c;同时也是用户功…

微信小程序纯CSS实现好看的加载动画

进入下面小程序可以体验效果&#xff1a; WXML: <wxs module"img" src"./loading.wxs"></wxs> <view class"loading-container {{show?:loading-container-hide}}"><view class"loading-mask" wx:if"{{ma…

LNMP环境:揭秘负载均衡与高可用性设计

lb1: 192.168.8.5 lb2: 192.168.8.6 web1:192.168.8.7 web2:192.168.8.8 php-fpm: 192.168.8.9 mysql: 192.168.8.10 nfs:192.168.8.11 分别插入镜像 8.5-8.8 分别安装nginx,并设置启动 8.9 安装php 8.10 安装mysql 先配置一台web服务器然后同步 设置网站根目录 cp -…

WebGL BabylonJS GUI 如何创建连接模型的按钮

如图所示&#xff1a; 方法&#xff1a; createGUI(mesh: BABYLON.Mesh, title: string, index: number) {const advancedTexture AdvancedDynamicTexture.CreateFullscreenUI(UI)const rect new Rectangle()rect.width 100pxrect.height 40pxrect.thickness 0advancedT…

在CentOS 8.5.2111下安装vncserver tigervnc-server

# 参考&#xff1a; How to Install TigerVNC Server on CentOS 8 前提&#xff1a; 默认用root操作所有命令 安装桌面GUI dnf groupinstall "Server with GUI" 安装tigervnc-server dnf install tigervnc-server 增加vncuser用户&#xff08;这里默认就是vncuse…

刷题之Leetcode704题(超级详细)

704. 二分查找 力扣题目链接(opens new window)https://leetcode.cn/problems/binary-search/ 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&am…

VRRP虚拟路由器冗余协议

vrrp是为了解决单点故障问题 将几台路由器联合成一台虚拟的路由器&#xff0c;保证通信的可靠性 协议小说&#xff1a; 协议不是在固定的哪一个层&#xff0c;是基于哪一层工作&#xff0c;比如说ospf是基于三层工作的 VRRP是基于三层工作的&#xff0c;就在前面会封装一个ip…

GD32F470_ADS1115 超小型 16位 模数转换器 ADC 4通道模块移植

2.9 ADS1115多路模数转换器 ADS1115 器件是兼容 IIC 的 16 位高精度低功耗模数转换器 (ADC)&#xff0c;采用超小型无引线 X2QFN-10 封装和 VSSOP-10 封装。ADS111x 器件采用了低漂移电压基准和振荡器。ADS1114 和 ADS1115 还采用可编程增益放大器(PGA)和数字比较器。这些特性加…

Python云计算技术库之libcloud使用详解

概要 随着云计算技术的发展,越来越多的应用和服务迁移到了云端。然而,不同云服务商的API和接口千差万别,给开发者带来了不小的挑战。Python的libcloud库应运而生,它提供了一个统一的接口,让开发者可以轻松地管理不同云服务商的资源。本文将深入探讨libcloud库的特性、安装…

HCIA-RS基础-STP原理与配置

目录 STP&#xff08;生成树协议&#xff09;原理与配置1. 生成树的产生原因2. 生成树协议的基本原理3. 生成树协议的简单配置4. STP 存在的问题 总结 STP&#xff08;生成树协议&#xff09;原理与配置 1. 生成树的产生原因 在计算机网络中&#xff0c;生成树&#xff08;Sp…

Burp内置浏览器报错提示网页证书无效的解决方式

在Proxy——代理设置中——翻到底&#xff0c;勾选忽略浏览器的Burp错误信息 然后刷新你的网页&#xff0c;就可以按常规操作&#xff0c;点击“继续访问”&#xff0c;打开网页了