Flask是一个轻量级的Python Web框架,适合快速开发小型Web应用和API。使用Flask可以非常方便地创建RESTful API。
1. 安装Flask
首先,确保已安装Flask。可以使用pip安装:
pip install Flask
2. 创建简单的Flask应用
一个简单的Flask应用包含一个或多个路由,每个路由处理特定的URL和HTTP方法。以下是一个基本的Flask应用示例:
示例:创建简单的Flask应用
from flask import Flask, jsonify, request
app = Flask(__name__)
# 创建一个路由,处理GET请求
@app.route('/api/hello', methods=['GET'])
def hello():
return jsonify(message="Hello, World!")
if __name__ == '__main__':
app.run(debug=True)
将上述代码保存为app.py
,然后运行它:
python app.py
然后打开浏览器,访问http://127.0.0.1:5000/api/hello
,你将看到以下JSON响应:
{
"message": "Hello, World!"
}
3. 创建RESTful API
使用Flask,可以轻松地创建一个支持CRUD(创建、读取、更新、删除)操作的RESTful API。以下是一个简单的示例:
示例:创建一个简单的RESTful API
from flask import Flask, jsonify, request, abort
app = Flask(__name__)
# 模拟数据库
tasks = [
{'id': 1, 'title': 'Task 1', 'description': 'This is task 1', 'done': False},
{'id': 2, 'title': 'Task 2', 'description': 'This is task 2', 'done': False}
]
# 获取所有任务
@app.route('/api/tasks', methods=['GET'])
def get_tasks():
return jsonify({'tasks': tasks})
# 获取单个任务
@app.route('/api/tasks/<int:task_id>', methods=['GET'])
def get_task(task_id):
task = next((task for task in tasks if task['id'] == task_id), None)
if task is None:
abort(404)
return jsonify({'task': task})
# 创建新任务
@app.route('/api/tasks', methods=['POST'])
def create_task():
if not request.json or not 'title' in request.json:
abort(400)
task = {
'id': tasks[-1]['id'] + 1 if tasks else 1,
'title': request.json['title'],
'description': request.json.get('description', ""),
'done': False
}
tasks.append(task)
return jsonify({'task': task}), 201
# 更新任务
@app.route('/api/tasks/<int:task_id>', methods=['PUT'])
def update_task(task_id):
task = next((task for task in tasks if task['id'] == task_id), None)
if task is None:
abort(404)
if not request.json:
abort(400)
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):
task = next((task for task in tasks if task['id'] == task_id), None)
if task is None:
abort(404)
tasks.remove(task)
return jsonify({'result': True})
if __name__ == '__main__':
app.run(debug=True)
将上述代码保存为app.py
,然后运行它:
python app.py
4. 测试API
可以使用curl
或Postman等工具测试API。
示例:使用curl测试API
- 获取所有任务:
curl -i http://127.0.0.1:5000/api/tasks
2.获取单个任务:
curl -i http://127.0.0.1:5000/api/tasks/1
3.创建新任务:
curl -i -H "Content-Type: application/json" -X POST -d '{"title":"New Task"}' http://127.0.0.1:5000/api/tasks
4.更新任务:
curl -i -H "Content-Type: application/json" -X PUT -d '{"title":"Updated Task", "done":true}' http://127.0.0.1:5000/api/tasks/1
5.删除任务:
curl -i -X DELETE http://127.0.0.1:5000/api/tasks/1
5. 可运行的Python案例
下面是完整的代码示例,演示了如何使用Flask创建一个简单的RESTful API。
from flask import Flask, jsonify, request, abort
app = Flask(__name__)
# 模拟数据库
tasks = [
{'id': 1, 'title': 'Task 1', 'description': 'This is task 1', 'done': False},
{'id': 2, 'title': 'Task 2', 'description': 'This is task 2', 'done': False}
]
# 获取所有任务
@app.route('/api/tasks', methods=['GET'])
def get_tasks():
return jsonify({'tasks': tasks})
# 获取单个任务
@app.route('/api/tasks/<int:task_id>', methods=['GET'])
def get_task(task_id):
task = next((task for task in tasks if task['id'] == task_id), None)
if task is None:
abort(404)
return jsonify({'task': task})
# 创建新任务
@app.route('/api/tasks', methods=['POST'])
def create_task():
if not request.json or not 'title' in request.json:
abort(400)
task = {
'id': tasks[-1]['id'] + 1 if tasks else 1,
'title': request.json['title'],
'description': request.json.get('description', ""),
'done': False
}
tasks.append(task)
return jsonify({'task': task}), 201
# 更新任务
@app.route('/api/tasks/<int:task_id>', methods=['PUT'])
def update_task(task_id):
task = next((task for task in tasks if task['id'] == task_id), None)
if task is None:
abort(404)
if not request.json:
abort(400)
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):
task = next((task for task in tasks if task['id'] == task_id), None)
if task is None:
abort(404)
tasks.remove(task)
return jsonify({'result': True})
if __name__ == '__main__':
app.run(debug=True)
可以将上面的代码保存为app.py
并运行,观察API的行为。通过这个示例,你可以理解如何使用Flask创建简单的RESTful API,并进行基本的CRUD操作。继续加油,学习Python会越来越有趣和有用!