使用Python构建一个简单的Web应用:Flask与REST API的实战教程

今天 5阅读

在现代软件开发中,Web 应用程序和 RESTful API 的开发是程序员必备技能之一。本文将通过一个完整的示例项目,介绍如何使用 Python 中的 Flask 框架构建一个简单的 Web 应用,并实现基本的 REST API 接口。

我们将完成以下内容:

创建一个 Flask 项目定义数据模型(使用内存数据库)实现 CRUD 操作的 REST API添加 JSON 请求处理逻辑使用 curl 或 Postman 测试 API 接口

环境准备

在开始之前,请确保你已经安装了 Python 3 和 pip。我们还需要安装 Flask 框架:

pip install Flask

创建 Flask 项目结构

我们先建立一个简单的项目结构:

flask_rest_api/├── app.py└── README.md

app.py 是我们的主程序文件。


定义数据模型与API接口

我们来创建一个用于管理“任务”的简单 API。每个任务包含 ID、标题、描述和是否完成的状态。

示例代码:app.py

from flask import Flask, jsonify, request, abortapp = Flask(__name__)# 内存中的任务列表作为模拟数据库tasks = [    {        'id': 1,        'title': '学习Flask',        'description': '了解Flask框架的基本用法',        'done': False    },    {        'id': 2,        'title': '写一篇技术文章',        'description': '关于使用Flask构建REST API的文章',        'done': False    }]# 获取所有任务@app.route('/api/tasks', methods=['GET'])def get_tasks():    return jsonify({'tasks': tasks})# 根据ID获取单个任务@app.route('/api/tasks/<int:task_id>', methods=['GET'])def get_task(task_id):    task = [task for task in tasks if task['id'] == task_id]    if len(task) == 0:        abort(404)    return jsonify({'task': task[0]})# 创建新任务@app.route('/api/tasks', methods=['POST'])def create_task():    if not request.json or not 'title' in request.json:        abort(400)    new_task = {        'id': tasks[-1]['id'] + 1 if tasks else 1,        'title': request.json['title'],        'description': request.json.get('description', ""),        'done': False    }    tasks.append(new_task)    return jsonify({'task': new_task}), 201# 更新任务@app.route('/api/tasks/<int:task_id>', methods=['PUT'])def update_task(task_id):    task = [task for task in tasks if task['id'] == task_id]    if len(task) == 0:        abort(404)    if not request.json:        abort(400)    task = task[0]    task['title'] = request.json.get('title', task['title'])    task['description'] = request.json.get('description', task['description'])    task['done'] = request.json.get('done', task['done'])    return jsonify({'task': task})# 删除任务@app.route('/api/tasks/<int:task_id>', methods=['DELETE'])def delete_task(task_id):    global tasks    tasks = [task for task in tasks if task['id'] != task_id]    return jsonify({'result': True})# 错误处理@app.errorhandler(404)def not_found(error):    return jsonify({'error': '未找到资源'}), 404@app.errorhandler(400)def bad_request(error):    return jsonify({'error': '错误请求'}), 400if __name__ == '__main__':    app.run(debug=True)

运行应用并测试API

启动应用:

python app.py

默认情况下,Flask 会运行在 http://127.0.0.1:5000/

我们可以使用 curl 命令或者 Postman 来测试各个接口。

示例测试命令

获取所有任务

curl -X GET http://localhost:5000/api/tasks

获取特定任务

curl -X GET http://localhost:5000/api/tasks/1

创建任务

curl -X POST http://localhost:5000/api/tasks \     -H "Content-Type: application/json" \     -d '{"title":"新任务","description":"这是新增的任务"}'

更新任务

curl -X PUT http://localhost:5000/api/tasks/1 \     -H "Content-Type: application/json" \     -d '{"title":"修改后的标题"}'

删除任务

curl -X DELETE http://localhost:5000/api/tasks/1

代码解析与关键技术点

1. Flask 路由与视图函数

Flask 使用装饰器来绑定 URL 路由到函数上。例如:

@app.route('/api/tasks', methods=['GET'])def get_tasks():    return jsonify({'tasks': tasks})

上面这段代码定义了一个 GET 请求的路由 /api/tasks,返回当前所有的任务列表。

2. 请求处理与 JSON 支持

Flask 提供了 request 对象来访问客户端发送的数据。我们可以通过 request.json 获取 JSON 数据。

if not request.json or not 'title' in request.json:    abort(400)

该段代码检查请求是否为 JSON 类型,并且是否包含必须字段 title

3. 错误处理机制

我们定义了两个错误处理器,分别处理 404(未找到)和 400(错误请求)错误:

@app.errorhandler(404)def not_found(error):    return jsonify({'error': '未找到资源'}), 404

这使得客户端能获得更友好的错误提示。

4. 全局变量与状态维护

在这个例子中,我们使用全局变量 tasks 来保存任务数据。虽然适用于演示目的,但在生产环境中建议使用真正的数据库如 SQLite、PostgreSQL 等。


扩展方向

本项目只是一个起点,你可以进一步拓展功能,比如:

使用 SQLAlchemy 集成数据库添加身份验证和 Token 支持(JWT)使用蓝图(Blueprint)组织大型项目结构添加 Swagger 文档支持(如 Flask-Swagger)使用 Docker 容器化部署

总结

本文通过一个具体的 Flask 项目实例,展示了如何构建一个具有完整 CRUD 功能的 REST API。Flask 以其轻量级和灵活性,非常适合用来快速搭建 Web 后端服务或微服务架构。

通过学习和实践这样的项目,不仅可以加深对 Web 开发流程的理解,也能提升 Python 编程能力。希望这篇文章对你有所帮助!


附录:完整源码地址

你可以将上述代码复制到本地文件 app.py 中直接运行。如果你喜欢,也可以将其上传到 GitHub 上进行版本控制和分享。

如需进一步的帮助,欢迎留言交流!

免责声明:本文来自网站作者,不代表CIUIC的观点和立场,本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。客服邮箱:ciuic@ciuic.com

目录[+]

您是本站第1068名访客 今日有30篇新文章

微信号复制成功

打开微信,点击右上角"+"号,添加朋友,粘贴微信号,搜索即可!