Python: 使用Flask实现REST API

本文档属于创建一个REST API指南的一部分。您可以在此处查看完整指南:如何使用Flask创建REST API

👋 欢迎来到 Stackhero 文档!

Stackhero 提供现成的 Python 云 解决方案,具有众多优势,包括:

  • 通过简单的 git push 在几秒钟内 部署您的应用程序。
  • 使用您自己的域名,并享受 HTTPS 证书的自动配置以增强安全性。
  • 享受 自动备份一键更新,以及简单、透明和可预测的定价,让您高枕无忧。
  • 通过私有和专用的 VM获得最佳的性能和强大的安全性

节省时间简化您的生活:只需 5 分钟即可试用 Stackhero 的 Python 云托管 解决方案!

现在,让我们深入代码!

创建一个名为app.py的文件,并插入以下代码:

import os
from dotenv import load_dotenv
from flask import Flask, jsonify, request

# 在非生产环境中从.env文件加载环境变量
if os.environ.get('ENV') != 'production':
    load_dotenv()

# 创建Flask应用
app = Flask(__name__)

# 示例数据集
tasks = [
    {
        'id': 1,
        'title': '买杂货',
        'description': '牛奶,奶酪,披萨,水果',
        'done': False
    },
    {
        'id': 2,
        'title': '学习Python',
        'description': '学习Python编程基础',
        'done': False
    }
]

# 路由'/api/tasks' (GET) 列出所有任务
@app.route('/api/tasks', methods=['GET'])
def get_tasks():
    return jsonify({'tasks': tasks})

# 路由'/api/tasks/<task_id>' (GET) 根据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:
        return jsonify({'error': '任务未找到'}), 404
    return jsonify({'task': task[0]})

# 路由'/api/tasks' (POST) 创建新任务
@app.route('/api/tasks', methods=['POST'])
def create_task():
    if not request.json or 'title' not in request.json:
        return jsonify({'error': '标题是必需的'}), 400
    task = {
        'id': tasks[-1]['id'] + 1,
        'title': request.json['title'],
        'description': request.json.get('description', ""),
        'done': False
    }
    tasks.append(task)
    return jsonify({'task': task}), 201

# 启动API服务器
if __name__ == '__main__':
    if os.environ.get('ENV') == 'production':
        app.run()
    else:
        app.run(host='0.0.0.0', port=8080, debug=True)

要启动服务器,请运行:

python app.py

使用host='0.0.0.0'选项,您还可以在使用Code-Hero时通过浏览器访问您的API。只需导航到http://<XXXXXX>.stackhero-network.com:8080/api/tasks,将<XXXXXX>替换为您的Code-Hero域名。