学习资料
官网: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 请求方法。