Flask 速成 REST API:从虚拟环境到 CRUD 单元测试,一步不漏!
文章目录
构建 REST API 是现代 Web 开发中的必备技能。Flask 作为一个轻量级的 Python Web 框架,非常适合快速构建和部署 API。本指南将带你逐步完成使用 Flask 构建 REST API 的全过程,包括环境设置、创建基本应用程序、构建 RESTful 端点以及测试 API 🚀。
💡 想让指标可衡量、团队节奏更透明?「开发任务管理系统 KPI」提示词可帮你基于 AI 超级提示词,快速制定与业务成果对齐的 KPI,兼顾用户参与度与交付质量!
一、设置开发环境 ⚙️
1.1 安装 Flask
pip install flask
1.2 创建虚拟环境(推荐)
# 创建
python -m venv venv
# 激活
## Windows
venv\Scripts\activate
## Linux/macOS
source venv/bin/activate
🛠️ 写完依赖别忘了跑「代码优化」提示词,一键诊断慢查询与重复请求,让接口响应提速 30 %!
二、创建基本 Flask 应用 🖥️
项目结构:
my_flask_api/
├── app.py
├── requirements.txt
└── venv/
最小可运行示例(app.py):
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return "Welcome to the Flask REST API!"
if __name__ == '__main__':
app.run(debug=True)
启动 & 浏览器访问:http://127.0.0.1:5000
三、构建 RESTful 端点 📡
3.1 数据模型(内存列表)
books = [
{"id": 1, "title": "Book One", "author": "Author A", "published_date": "2021-01-01"},
{"id": 2, "title": "Book Two", "author": "Author B", "published_date": "2022-02-02"}
]
3.2 CRUD 实现
| 方法 | 端点 | 功能 |
|---|---|---|
| GET | /books |
获取全部 |
| GET | /books/<int:book_id> |
获取单本 |
| POST | /books |
新增 |
| PUT | /books/<int:book_id> |
更新 |
| DELETE | /books/<int:book_id> |
删除 |
代码片段:
from flask import request, jsonify
# 获取全部
@app.route('/books', methods=['GET'])
def get_books():
return jsonify(books)
# 获取单本
@app.route('/books/<int:book_id>', methods=['GET'])
def get_book(book_id):
book = next((b for b in books if b["id"] == book_id), None)
return jsonify(book) if book else ("Not Found", 404)
# 新增
@app.route('/books', methods=['POST'])
def add_book():
new_book = request.get_json()
new_book["id"] = max(b["id"] for b in books) + 1
books.append(new_book)
return jsonify(new_book), 201
# 更新
@app.route('/books/<int:book_id>', methods=['PUT'])
def update_book(book_id):
book = next((b for b in books if b["id"] == book_id), None)
if not book:
return ("Not Found", 404)
data = request.get_json()
book.update(data)
return jsonify(book)
# 删除
@app.route('/books/<int:book_id>', methods=['DELETE'])
def delete_book(book_id):
global books
books = [b for b in books if b["id"] != book_id]
return ("", 204)
四、测试 API ✅
4.1 手动测试(cURL / Postman)
# 获取全部
curl http://127.0.0.1:5000/books
# 新增
curl -X POST -H "Content-Type: application/json" \
-d '{"title":"Flask Handbook","author":"Your Name","published_date":"2025-06-01"}' \
http://127.0.0.1:5000/books
4.2 单元测试(unittest)
test_app.py
import unittest
from app import app
class TestAPI(unittest.TestCase):
def setUp(self):
self.app = app.test_client()
self.app.testing = True
def test_get_books(self):
resp = self.app.get('/books')
self.assertEqual(resp.status_code, 200)
def test_add_book(self):
new = {"title": "TDD with Flask", "author": "Tester", "published_date": "2025-01-01"}
resp = self.app.post('/books', json=new)
self.assertEqual(resp.status_code, 201)
if __name__ == '__main__':
unittest.main()
运行测试:
python test_app.py
五、总结 & 下一步 🏁
通过本指南,您已掌握:
- 虚拟环境隔离依赖
- Flask 最小应用跑通
- 完整 CRUD 端点
- 手动 + 单元测试双保险
🔍 上线前最后一步:跑「代码审查助手」,自动捕捉潜在漏洞、性能隐患与风格问题,给出可执行反馈,确保 API 稳如磐石!
六、Bonus:一键生成分页 & 异常处理(进阶)⚡
from flask import abort, request
@app.route('/books')
def get_books_paged():
page = int(request.args.get('page', 1))
limit = int(request.args.get('limit', 10))
start = (page-1)*limit
return jsonify(books[start:start+limit])
@app.errorhandler(404)
def resource_not_found(e):
return jsonify(error=str(e)), 404
七、常见疑问 ❓
Q1. 如何部署到生产?
→ 使用 Gunicorn + Nginx:gunicorn -w 4 app:app
Q2. 如何切换为数据库?
→ 引入 SQLAlchemy + Flask-Migrate,模型替换内存列表即可
Q3. 怎样生成 API 文档?
→ 安装 Flasgger 或 flask-restx,自动根据注释输出 Swagger
📖 想给前端同事一份秒懂的接口文档?「代码文档生成器」可自动生成标准化字段描述、请求/响应示例与错误码,让协作零阻力!
八、结语 🎯
Flask 的轻量级与可扩展性,让它成为中小型 REST 服务的理想选择。跟着本教程,您已拥有:
- 可运行的 CRUD API
- 单元测试骨架
- 分页、异常处理进阶示例
先用「代码生成」快速产出 SDK 与错误重试逻辑,再用 KPI 面板持续监控接口延迟、测试覆盖率与线上错误率,你的 Flask API 将更快、更稳地抢占市场 🚀!
原文链接: https://blog.bytescrum.com/building-a-rest-api-with-flask-a-step-by-step-guide
热门API
- 1. AI文本生成
- 2. AI图片生成_文生图
- 3. AI图片生成_图生图
- 4. AI图像编辑
- 5. AI视频生成_文生视频
- 6. AI视频生成_图生视频
- 7. AI语音合成_文生语音
- 8. AI文本生成(中国)
最新文章
- 2025大学生暑假兼职新风口:从送外卖到做AI副业,你还在靠体力赚零花钱吗?
- 如何获取Microsoft API Key 密钥实现bing搜索分步指南
- Google Pay UPI 注册与集成指南
- 香港支付宝可以绑定大陆银行卡吗?详解使用方法与步骤
- New API架构:探索现代软件开发的新趋势
- 什么是 Wandb
- 在 Golang 中实现 JWT 令牌认证
- 如何使用 Google News API 获取实时新闻数据
- API文档:深入指南与前沿免费工具 – Apidog
- 交叉熵的Numpy实现:从理论到实践
- Google DeepMind发布 Genie 3与Shopify:2小时上线电商3D样板间实战
- Gemini Deep Research 技术实战:利用 Gemini Advanced API 构建自动化的深度研究 Agent