Python学习计划——8.3使用Flask创建简单的Web API

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
  1. 获取所有任务:
    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会越来越有趣和有用!

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值