FastAPI实战:3步搞定增删改查,你的第一个完整API来了!
学完前面章节,我们已经实现了 HTTP GET 请求。是否曾感到困惑:页面数据有了,但数据要怎么变呢? 就像只能看,不能动的展览馆 —— 信息都在那里,你却无法互动。
今天,我们将补齐这个关键缺口,用FastAPI实现完整的CRUD操作(增删改查),让你的API真正“动”起来!
POST 请求:创建新数据
为什么需要POST?
想象一下图书馆场景:GET 请求就像查阅图书目录,而POST请求则是入库新书。之前我们只能查看现有书籍,现在终于可以添加新内容了
添加新书:
from fastapi import Body
@app.post("/books/create_book")
async def create_book(new_book=Body()):
BOOKS.append(new_book)
return {"message": "图书添加成功"}
上面代码中,我们需要先导入请求体 from fastapi import Body,这样,我们就可以使用请求体中的额外内容了。
关键:请求体
- 更大数据容量:不再受限于URL长度
- 更丰富的数据结构:支持复杂JSON对象
- 更安全的数据传输:敏感信息不会暴露在URL中
操作演示:创建书籍
我们回到 Swagger UI 中,刷新页面。
找到 POST /books/create_book 接口,打开它,点击 “Try it out”,在请求体中添加下面内容:
{
"title": "Title Seven",
"author": "Author Two",
"category": "math"
}
注意:
在 Python 中,我们表示字符串可以使用双引号或者单引号。
但是,在请求体中,我们必须使用双引号,而不是单引号。
点击 “Execute”,执行它。得到响应码 200,这时,就创建了一个新的书籍信息。
在上面图中,可以看到,Swagger UI 使用 Curl 命令调用我们的 FastAPI 服务器。
curl -X 'POST' \
'http://127.0.0.1:8000/books/create_book' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"title": "Title Seven",
"author": "Author Two",
"category": "math"
}'
此时,我们回到 Swagger UI 中,刷新页面。找到 GET /books 这个接口,查询全部书籍信息时,就可以找到我们刚刚添加的这个书籍信息。
Put 请求:实现精准更新
PUT请求就像**编辑文档 **—— 找到特定条目,修改需要调整的部分,保持其他内容不变。
更新书籍信息:
@app.put("/books/update_book")
async def update_book(updated_book=Body()):
for i in range(len(BOOKS)):
if BOOKS[i].get("title").casefold() == updated_book.get("title").casefold():
BOOKS[i] = updated_book
操作演示:修改书籍类别
我们要将标题为 Title Six 的书籍类别,由 math 改为 history。
回到 Swagger UI 中,刷新页面。找到 PUT /books/update_book 接口,打开它,点击 “Try it out” ,在请求体中添加下面内容:
{
"title": "Title Six",
"author": "Author Six",
"category": "history"
}
我们点击 “Execute” 执行它,我们得到状态码是 “200”,响应体是 “null”。
此时,我们回到 Swagger UI 中,刷新页面。找到 GET /books 这个接口,查询全部书籍信息。
我们看到,标题为 "Title Six" 的书籍,类别已经修改为 "history"。
{
"title": "Title Six",
"author": "Author Six",
"category": "history"
}
回顾下新加的代码
@app.put("/books/update_book")
async def update_book(updated_book=Body()):
for i in range(len(BOOKS)):
if BOOKS[i].get("title").casefold() == updated_book.get("title").casefold():
BOOKS[i] = updated_book
PUT 也可以像 POST 一样接受一个请求体,我们也可以只更新一个列表中的一个信息。
至此,PUT 请求的所有内容就结束了。
Delete 请求:数据删除
DELETE操作就像图书馆的下架系统——需要准确定位,谨慎操作,避免误删。
删除指定书籍:
@app.delete("/books/delete_book/{book_title}")
async def delete_book(book_title: str):
for i in range(len(BOOKS)):
if BOOKS[i].get("title").casefold() == book_title.casefold():
BOOKS.pop(i)
break
操作演示:删除标题为 “Title Four” 的书籍
回到 Swagger UI 中,刷新页面。找到 DELETE /books/delete_book/{book_title} 接口,打开它,点击 “Try it out” ,在 “book_title” 参数中添加 “title four”。
点击 “Execute”,执行它。我们得到响应码 200,响应体 null。
此时,我们回到 Swagger UI 中,刷新页面。找到 GET /books 这个接口,查询全部书籍信息。
我们看到,标题为"Title Four" 的书籍,已经被删掉了。
-------- 写在最后 --------
我的公众号正在连载《FastAPI 开发实战》、《Python 核心技术》、《Python 自动化办公》《职场》。
关注我,每天解锁一个实用知识点。
点赞 :如果觉得有收获,点赞支持一下吧!
分享 :分享给身边同样对Python感兴趣的朋友!
关注我 :不要错过每一篇 Python 实战内容!
每周更新 Python 核心技术、FastAPI 开发实战、Python 自动化办公、职场等硬核技巧,助你成为 10 倍效率的开发者!
#Python #FastAPI #API #Web开发 #程序员 #编程教程 #效率提升