Python: 使用 Flask 实现 REST API

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

👋 欢迎查阅 Stackhero 文档!

Stackhero 提供即开即用的 Python 云服务 方案,助您高效简化部署流程:

  • 只需一次简单的 git push,即可在几秒钟内将您的应用部署到生产环境。
  • 支持自定义域名,自动配置 HTTPS 证书,安全连接全程托管,无需手动操作。
  • 提供自动备份一键升级可预测的定价,让您专注于代码开发,无需担心基础设施管理。
  • 依托私有专属基础设施,为您带来强劲的性能安全保障。您的环境完全隔离且受到保护。

节省时间简化工作流程:通过 Stackhero 的 Python 云主机,您的代码最快只需 5 分钟即可上线运行。

现在,您可以开始编写 API 代码了。

创建一个名为 app.py 的文件,并添加如下代码:

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

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

app = Flask(__name__)

# 示例任务数据
tasks = [
    {
        'id': 1,
        'title': 'Buy groceries',
        'description': 'Milk, Cheese, Pizza, Fruits',
        'done': False
    },
    {
        'id': 2,
        'title': 'Learn Python',
        'description': 'Learn Python programming basics',
        '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 = [task for task in tasks if task['id'] == task_id]
    if not task:
        return jsonify({'error': 'Task not found'}), 404
    return jsonify({'task': task[0]})

@app.route('/api/tasks', methods=['POST'])
def create_task():
    if not request.json or 'title' not in request.json:
        return jsonify({'error': 'Title is required'}), 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

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 域名。