Flask
Flask 是一个轻量级、灵活的 Python Web 框架,以简洁和可扩展性为核心设计理念。它不强制依赖特定库或架构,仅提供核心功能(如路由、模板渲染),开发者可自由选配数据库、表单验证等组件。这种"微框架"特性使其学习成本极低,同时能通过扩展轻松构建复杂应用,特别适合快速开发小型项目或作为微服务基础。
本指南介绍如何在 CloudBase HTTP 云函数上部署 Flask 应用程序。
前置条件
在开始之前,请确保您已经:
- 安装了 Python 3.10 或更高版本
- 拥有腾讯云账号并开通了 CloudBase 服务
- 了解基本的 Python 和 Flask 开发知识
第一步:创建 Flask 应用
💡 提示:如果您已经有一个 Flask 应用,可以跳过此步骤。
创建项目目录
mkdir flask-cloudbase
cd flask-cloudbase
设置虚拟环境
# 创建虚拟环境
python -m venv env
# 激活虚拟环境
# Linux/macOS
source env/bin/activate
# Windows
# env\Scripts\activate
安装 Flask
pip install flask
第二步:编写应用代码
创建 app.py 文件作为应用的入口文件:
⚠️ 重要提示:CloudBase HTTP 云函数要求应用监听 9000 端口。
import os
from flask import Flask, jsonify, request
app = Flask(__name__)
# 配置应用
app.config['DEBUG'] = os.environ.get('DEBUG', 'False').lower() == 'true'
app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY', 'your-secret-key-here')
# 模拟数据
users = [
{'id': 1, 'name': '张三', 'email': 'zhangsan@example.com'},
{'id': 2, 'name': '李四', 'email': 'lisi@example.com'},
{'id': 3, 'name': '王五', 'email': 'wangwu@example.com'}
]
@app.route('/')
def hello():
"""根路径处理函数"""
return jsonify({
'message': 'Hello from Flask on CloudBase!',
'framework': 'Flask',
'version': '2.3.0'
})
@app.route('/health')
def health_check():
"""健康检查接口"""
return jsonify({
'status': 'healthy',
'framework': 'Flask',
'python_version': os.sys.version
})
@app.route('/api/users', methods=['GET'])
def get_users():
"""获取用户列表(支持分页)"""
page = request.args.get('page', 1, type=int)
limit = request.args.get('limit', 10, type=int)
# 简单分页逻辑
start_index = (page - 1) * limit
end_index = start_index + limit
paginated_users = users[start_index:end_index]
return jsonify({
'success': True,
'data': {
'total': len(users),
'page': page,
'limit': limit,
'items': paginated_users
}
})
@app.route('/api/users/<int:user_id>', methods=['GET'])
def get_user(user_id):
"""根据 ID 获取用户"""
user = next((u for u in users if u['id'] == user_id), None)
if not user:
return jsonify({
'success': False,
'message': 'User not found'
}), 404
return jsonify({
'success': True,
'data': user
})
@app.route('/api/users', methods=['POST'])
def create_user():
"""创建新用户"""
data = request.get_json()
if not data or 'name' not in data or 'email' not in data:
return jsonify({
'success': False,
'message': 'Name and email are required'
}), 400
# 检查邮箱是否已存在
if any(u['email'] == data['email'] for u in users):
return jsonify({
'success': False,
'message': 'Email already exists'
}), 400
# 创建新用户
new_user = {
'id': max(u['id'] for u in users) + 1 if users else 1,
'name': data['name'],
'email': data['email']
}
users.append(new_user)
return jsonify({
'success': True,
'data': new_user
}), 201
@app.route('/api/users/<int:user_id>', methods=['PUT'])
def update_user(user_id):
"""更新用户信息"""
user_index = next((i for i, u in enumerate(users) if u['id'] == user_id), None)
if user_index is None:
return jsonify({
'success': False,
'message': 'User not found'
}), 404
data = request.get_json()
if not data:
return jsonify({
'success': False,
'message': 'No data provided'
}), 400
# 检查邮箱是否被其他用户使用
if 'email' in data and any(u['email'] == data['email'] and u['id'] != user_id for u in users):
return jsonify({
'success': False,
'message': 'Email already exists'
}), 400
# 更新用户信息
if 'name' in data:
users[user_index]['name'] = data['name']
if 'email' in data:
users[user_index]['email'] = data['email']
return jsonify({
'success': True,
'data': users[user_index]
})
@app.route('/api/users/<int:user_id>', methods=['DELETE'])
def delete_user(user_id):
"""删除用户"""
user_index = next((i for i, u in enumerate(users) if u['id'] == user_id), None)
if user_index is None:
return jsonify({
'success': False,
'message': 'User not found'
}), 404
deleted_user = users.pop(user_index)
return jsonify({
'success': True,
'message': f'User {deleted_user["name"]} deleted successfully'
})
# 错误处理
@app.errorhandler(404)
def not_found(error):
return jsonify({
'success': False,
'message': 'Resource not found'
}), 404
@app.errorhandler(500)
def internal_error(error):
return jsonify({
'success': False,
'message': 'Internal server error'
}), 500
@app.errorhandler(400)
def bad_request(error):
return jsonify({
'success': False,
'message': 'Bad request'
}), 400
if __name__ == '__main__':
# CloudBase HTTP 云函数要求监听 9000 端口
app.run(host='0.0.0.0', port=9000, debug=False)
代码说明
让我们详细解释上述代码的关键部分:
-
Flask 应用创建
app = Flask(__name__)创建 Flask 应用实例,
__name__参数帮助 Flask 识别应用程序的位置。 -
路由装饰器
@app.route('/')def hello():return jsonify({'message': 'Hello from Flask!'})@app.route('/')装饰器定义 URL 路由,当访问根 URL 时执行对应函数。 -
HTTP 方法支持
@app.route('/api/users', methods=['GET', 'POST'])通过
methods参数指定路由支持的 HTTP 方法。 -
错误处理
@app.errorhandler(404)def not_found(error):return jsonify({'error': 'Not Found'}), 404使用
@app.errorhandler装饰器处理特定的 HTTP 错误。
第三步:本地测试
启动应用
python app.py