fastapi系列1-基础知识

news2024/12/25 22:20:08

学习资料

官网:https://fastapi.tiangolo.com/
github:https://github.com/tiangolo/fastapi
视频教程【独家新技术】从0到1学习 FastAPI 框架的所有知识点
依赖底层包:https://www.starlette.io/
轻松上手Python的Web神器:FastAPI教程:https://zhuanlan.zhihu.com/p/624779536

基础笔记

有入参有出参, 定义好数据接口即可

数据类型定义,依托starlette

在这里插入图片描述

路由分组

路由分组
在 FastAPI 中,您可以将相关的路由组织到一个分组中,来管理和维护代码结构。您可以使用 FastAPI 提供的 APIRouter 类来创建路由分组。

以下是一个简单的 FastAPI 路由分组示例:

from fastapi import FastAPI, APIRouter

app = FastAPI()

router = APIRouter()

@router.get("/items/")
async def read_items():
    return [{"item_id": "1"}, {"item_id": "2"}]

@router.get("/items/{item_id}")
async def read_item(item_id: str):
    return {"item_id": item_id}

app.include_router(router, prefix=“/api/v1”)
在这个示例中,我们使用 APIRouter 创建一个名为 router 的路由分组。然后,我们定义了两个路由,/items/ 和 /items/{item_id},并指定了不同的 HTTP 请求方法和相应的函数实现。最后使用 app.include_router 将 router 路由分组上的路由挂载在 /api/v1 路由下。

通过使用路由分组,可以将各个子模块的路由规则、处理方法等进行分组管理,大大提高了代码的可读性和可维护性。

以上是对 FastAPI 的增删改查操作和路由分组的简要介绍,FastAPI 还有很多其他功能和特性,以及更完整的实践案例。如果您有进一步的问题或需要,欢迎咨询。

前端

在前端访问 FastAPI 路由分组时,您需要使用正确的 URL 地址和 HTTP 请求方法,并传递必要的参数进行访问。

以我们之前的示例为例,在 /api/v1/items/ 路由分组下,我们定义了两个路由:

GET /api/v1/items/: 获取所有的数据。
GET /api/v1/items/{item_id}: 获取具体的数据。
对于这两个路由,前端可以通过以下方式进行访问:

获取所有的数据
使用 HTTP 的 GET 请求方法,以 http://<your_server_address>/api/v1/items/ 为 URL 地址,即可获取所有数据。示例代码如下:

fetch(‘http://<your_server_address>/api/v1/items/’)
.then(res => res.json())
.then(data => console.log(data))
.catch(error => console.log(error))
此处使用了 JavaScript fetch API 发起 GET 请求获取所有的数据,并在控制台打印服务器返回的数据。

获取具体的数据
使用 HTTP 的 GET 请求方法,将 {item_id} 替换成实际的数字 ID,并以 http://<your_server_address>/api/v1/items/{item_id} 为 URL 地址,即可获取具体的数据。示例代码如下:

fetch(‘http://<your_server_address>/api/v1/items/1’)
.then(res => res.json())
.then(data => console.log(data))
.catch(error => console.log(error))
此处使用了 JavaScript fetch API 发起 GET 请求获取 ID 为 1 的数据,并在控制台打印服务器返回的数据。

除了 GET 请求方法外,还有其他的 HTTP 请求方法可以用于访问接口,例如 POST、PUT、DELETE 等,具体使用方法类似。在发送请求时需要注意传递的参数和格式,以及在响应后正确处理返回的数据。

需要注意的是,在使用 FastAPI 的路由分组时要考虑好路由命名和前端对接的方案,以确保各个模块之间的协作顺畅。

上面的增删改查,前端是怎么对接和访问的,怎么感觉put和post是一样的?

感谢您的提问。POST和PUT方法确实在一些场景下很相似,但它们在语义上还是有所区别的。

在传统的 Web 应用中,通常会使用POST方法来创建新的资源,使用PUT方法来更新已有的资源。POST方法是非幂等的(Non-idempotent),即多次调用该方法,每次调用都会创建一份新的资源;而PUT方法是幂等的(Idempotent),即多次调用该方法,只会更新同一份资源,而不会产生多个副本。

当然,在某些场景下,PUT和POST方法可能会产生相似或相同的效果,例如对于一份个人简历的更新,可能使用PUT方法更新已有的简历,也可以使用POST方法创建一份新的简历并保存,这两种方法实现的效果是相同的。

下面是一些前端对接增删改查的示例代码,供您参考:

新增数据(POST)
在前端使用 HTTP POST 方法新增数据时,需要通过发送请求体(Request Body)的方式将数据发送给服务器。以 Axios HTTP 客户端为例,示例代码如下:

axios.post(‘/api/v1/items’, {name: ‘fastapi’, price: 10.99, is_offer: true})
.then(response => console.log(response.data))
.catch(error => console.log(error))
此处使用 Axios POST 方法向 /api/v1/items URL 地址发送数据,请求体为一个 JSON 对象。

获取数据(GET)
在前端使用 HTTP GET 方法获取数据时,只需要向服务器发送 GET 请求,等待服务器返回数据即可。以 jQuery Ajax 为例,示例代码如下:

$.ajax({
url: ‘/api/v1/items’,
type: ‘GET’,
success: function(data) {
console.log(data)
},
error: function(error) {
console.log(error)
}
})
更新数据(PUT)
在前端使用 HTTP PUT 方法更新数据时,同样需要通过发送请求体的方式,将需要更新的数据发送给服务器。以 Fetch API 为例,示例代码如下:

fetch(/api/v1/items/${item_id}, {
method: ‘PUT’,
headers: {‘Content-Type’: ‘application/json’},
body: JSON.stringify({name: ‘fastapi2’, price: 15.99, is_offer: false})
})
.then(res => res.json())
.then(data => console.log(data))
.catch(error => console.log(error))
此处使用 Fetch API PUT 方法向 /api/v1/items/{item_id} URL 地址发送 PUT 请求,请求体为一个 JSON 对象。需要注意的是,由于 Fetch API 的特性,需要手动指定请求头(headers)和请求体的格式。

删除数据(DELETE)
在前端使用 HTTP DELETE 方法删除数据时,只需要向服务器发送 DELETE 请求即可。以 Vue.js Http 模块为例,示例代码如下:

this. h t t p . d e l e t e ( ‘ / a p i / v 1 / i t e m s / http.delete(`/api/v1/items/ http.delete(‘/api/v1/items/{item_id}`)
.then(response => console.log(response.body))
.catch(error => console.log(error))
此处使用 Vue.js Http 模块 DELETE 方法向 /api/v1/items/{item_id} URL 地址发送 DELETE 请求,等待服务器响应。

以上是一个简单的示例,您可以根据需要选择适当的 HTTP 客户端库和对应的函数进行使用。希望对您有所帮助。

是不是用post就可以实现所有的增删改查了

可以说,使用 HTTP POST 方法可以支持创建、更新和删除数据的操作,但是并不符合 RESTful 风格规范且在实际开发中不推荐这样做。

在标准的 RESTful 风格中,通常使用不同的 HTTP 请求方法来对应不同的操作:

POST:用于在服务器创建新的资源。
GET:用于从服务器读取资源。
PUT:用于更新指定的资源。
DELETE:用于删除指定的资源。
在一些场景下,可以将 PATCH 方法用于部分更新资源并保持幂等性。

因此,您在实际开发中应该根据不同的操作选择不同的 HTTP 请求方法。其中,使用 POST 方法代替 PUT 或 DELETE 方法可能会导致一些潜在的问题,例如:

不安全:POST 方法不像 PUT 或 DELETE 方法那样幂等,因此可能会在重试操作时带来风险。
代码混淆:使用同一 HTTP 方法发送多种操作不利于代码的可读性和可维护性。
为了使用正确的 HTTP 方法,并避免代码混淆,建议您在开发时遵循 RESTful 风格规范,并在应用程序的核心代码中嵌入正确的 HTTP 请求方法。

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

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

相关文章

ubuntu20.04共享文件夹—— /mnt/hgfs里没有共享文件夹

参考文章&#xff1a;https://blog.csdn.net/Edwinwzy/article/details/129580636 虚拟机启用共享文件夹后&#xff0c;/mnt/hgfs下面为空&#xff0c;使用 vmware-hgfsclient 查看设置的共享文件夹名字也是为空。 解决方法&#xff1a; 1. 重新安装vmware tools. 在菜单…

HarmonyOS/OpenHarmony应用开发-ArkTS语言渲染控制ForEach循环渲染

ForEach基于数组类型数据执行循环渲染。说明&#xff0c;从API version 9开始&#xff0c;该接口支持在ArkTS卡片中使用。 一、接口描述 ForEach(arr: any[], itemGenerator: (item: any, index?: number) > void,keyGenerator?: (item: any, index?: number) > stri…

谈谈IP地址和子网掩码的概念及应用

个人主页&#xff1a;insist--个人主页​​​​​​ 本文专栏&#xff1a;网络基础——带你走进网络世界 本专栏会持续更新网络基础知识&#xff0c;希望大家多多支持&#xff0c;让我们一起探索这个神奇而广阔的网络世界。 目录 一、IP地址的概念 二、IP地址的分类 1、A类 …

react之 router6路由 (两种路由模式、两种路由跳转、两种传参与接收参数、嵌套路由,layout组件、路由懒加载)

目录 react路由1&#xff1a;安装和两种模式react路由2&#xff1a;两种路由跳转 &#xff08; 命令式与编程式&#xff09;2-1 路由跳转-命令式2-2 路由跳转-编程式 - 函数组件2-2-1 app.jsx2-2-2 page / Home.jsx2-2-3 page / About.jsx2-2-4 效果 react路由3&#xff1a;函数…

恒运资本:A股质押降至十年新低,高比例质押公司不足1%!

2018年&#xff0c;A股商场股权质押规划到达历史高位&#xff0c;为化解危险&#xff0c;监管层通过多种方式、多方合力给予纾解&#xff0c;取得积极成效。上篇分析了A股质押危险大幅缓解的六大原因&#xff0c;本篇从高份额质押股特征、职业、地域、企业类型等视点&#xff0…

七麦analysis参数加密分析

文章目录 1. 接口分析2. 断点调式3. 补环境重写加密4. 验证结果 1. 接口分析 目标站点&#xff1a; aHR0cHM6Ly93d3cucWltYWkuY24vcmFuay9tYXJrZXRSYW5r 先刷新网页&#xff0c;请求接口中的analysis参数本次分析的目标 2. 断点调式 打上XHR断点&#xff0c;刷新页面之后断点…

【MT32F006】MT32F006之串口

本文最后修改时间&#xff1a;2023年03月30日 一、本节简介 本文介绍如何使用MT32F006的串口。 二、实验平台 库版本&#xff1a;V1.0.0 编译软件&#xff1a;MDK5.37 硬件平台&#xff1a;MT32F006开发板&#xff08;主芯片MT32F006&#xff09; 仿真器&#xff1a;JLINK…

无涯教程-Perl - umask函数

描述 此函数为当前进程设置umask(创建文件和目录时应用的默认掩码)。 EXPR的值必须是八进制数。如果省略EXPR,则只需返回先前的值。 语法 以下是此函数的简单语法- umask EXPRumask返回值 此函数返回先前的umask值。 例 以下是显示其基本用法的示例代码- #!/usr/bin/pe…

Java学习笔记30——字节缓冲流

字节缓冲流 字节缓冲流缓冲输出流缓冲输入流 复制视频速度对比 字节缓冲流 缓冲输出流 BufferadOutputStream通过设置这样的输出流&#xff0c;应用程序可以向底层输出流写入字节&#xff0c;而不必为写入的每个细节导致底层系统的调用 构造方法 BufferadOutputStream(Outpu…

【Elsevier旗下】1区SCI,5天见刊!稳定检索36年

近日国自然即将发布&#xff0c;想必申请过国自然基金作者都知道&#xff0c;需要有研究基础&#xff0c;说白了就是需要有文章支持。那么稿子写好了&#xff0c;选择一本靠谱优质期刊也是一门学问。 以下2本Elsevier 旗下审稿快刊&#xff0c;各项指标优秀&#xff0c;实为评…

QT connect使用简单介绍

如图&#xff0c;首先 connect是线程安全的。其次它有很多重载&#xff0c;当然最重要的还是QT4连接和QT5连接的区别&#xff0c;这个函数重载表示connect函数也是支持lambda函数的。 connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)connec…

Redis——set类型详解

概要 Set&#xff08;集合&#xff09;&#xff0c;将一些有关联的数据放到一起&#xff0c;集合中的元素是无序的&#xff0c;并且集合中的元素是不能重复的 之前介绍的list就是有序的&#xff0c;对于列表来说[1, 2, 3] 和 [2, 1, 3]是两个不同的列表&#xff0c;而对于集合…

阿里Canal学习笔记

github地址 canal 使用IDEA打开&#xff0c;注意国内加载慢的问题&#xff0c;解决方式如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <settings xmlns"http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi"http://w…

CAS:2143933-81-5,ICG-Maleimide,吲哚菁绿马来酰亚胺,脂溶性染料试剂

今日文章关键词&#xff1a;脂溶性染料试剂,吲哚菁绿马来酰亚胺&#xff0c;CAS&#xff1a;2143933-81-5 试剂基团反应特点&#xff1a;ICG-maleimide的马来酰 亚胺可以和蛋白、多肽、小分子或抗体上的SH巯基反应连接。ICG染料的马来酰亚胺提供了开发共轭物的机会。Maleimide…

Python入门【原生字符串、边界字符、search函数、re模块中其他常用的函数 、贪婪模式和非贪婪模式、择一匹配(|)的使用、分组】(三十)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小王&#xff0c;CSDN博客博主,Python小白 &#x1f4d5;系列专栏&#xff1a;python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 &#x1f4e7;如果文章知识点有错误…

ZooKeeper的应用场景(分布式锁、分布式队列)

7 分布式锁 分布式锁是控制分布式系统之间同步访问共享资源的一种方式。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源&#xff0c;那么访问这些资源的时候&#xff0c;往往需要通过一些互斥手段来防止彼此之间的干扰&#xff0c;以保证一致性&#xff0c;…

RuoYi项目下载及配置启动

一. 前置要求 这里假设你已经安装并配置了JDK1.8,Node,Git,IDEA,vscode,MySQL,navicat 16,Redis,RDM环境,如果没有下载安转可以参考我的博客找到对应的软件下载安装即可 二.下载源码 官网地址 方式一:直接下载ZIP压缩包 方式二:利用Git下载源码 点击复制之后,在需要下载代码…

华为昇腾助力大模型,算力国产化时代已来

去年世界人工智能大会&#xff08;WAIC 2022&#xff09;上&#xff0c;只有屈指可数的几家大厂推出大模型&#xff0c;但在科技部新一代人工智能发展研究中心5月底发布的《中国人工智能大模型地图研究报告》显示&#xff0c;我国10亿参数规模以上的大模型已发布79个&#xff0…

Do You Like Interactive Problems?

Problem - 7386 题目大意&#xff1a;给出一整数n&#xff0c;有一个隐藏的在1~n范围内的数x&#xff0c;每次随机询问一个y&#xff0c;会得知x<y,x>y,或xy&#xff0c;当可能的x唯一确定时停止询问&#xff0c;问期望的询问次数是多少 1<n<1e9 思路&#xff1…

AMEYA360邀您参加EESA第二届中国国际储能展览会暨第十届国际大会

2023年8月30日-9月1日&#xff0c;由EESA储能领跑者联盟主办的第二届中国国际储能展览会将重磅亮相苏州国际博览中心。作为目前中国乃至整个亚洲区最聚焦的储能展览会&#xff0c;本次展览会的规模高达10万平方米&#xff0c;来自全国各地超过1000多家储能核心企业将共襄盛举&a…