Python Flask 轻量级 Web 框架的基础用法及 HTTP 微服务开发流程。内容涵盖 Flask 环境安装与验证、GET 与 POST 接口的实现(包括路径参数、查询参数、JSON 及表单数据处理)、以及基于 SQLAlchemy 的 SQLite 数据库集成。教程详细演示了用户资源的 CRUD 操作,包括创建、查询列表、查询详情、搜索、更新和删除功能,并结合 Postman 工具进行了接口测试说明。文章旨在帮助开发者快速掌握 Flask 构建 RESTful API 的核心技能。
栈溢出3 浏览
Python Flask HTTP 微服务开发与数据库集成
Flask 是一个轻量级的 Python Web 框架,以其'微内核'设计哲学闻名。所谓'微'并非指功能简单,而是指核心简洁、高度可扩展——Flask 只提供最基础的 Web 服务能力,其他所有功能都可通过丰富的扩展生态系统按需添加。这种设计让开发者能够从几行代码的简单应用开始,逐步构建出复杂的企业级系统。
@flaskApp.route('/api/create/user', methods=['POST'])defcreate_user():
data = request.get_json()
required_fields = ['username', 'email']
for field in required_fields:
if field notin data ornot data[field].strip():
return jsonify({'error': f'{field}是必填项'}), 400if User.query.filter_by(username=data['username']).first():
return jsonify({'error': '用户名已存在'}), 409if User.query.filter_by(email=data['email']).first():
return jsonify({'error': '邮箱已存在'}), 409
new_user = User(
username=data['username'],
email=data['email']
)
sqliteDb.session.add(new_user)
sqliteDb.session.commit()
return jsonify({
'message': '用户创建成功',
'user': new_user.to_dict()
}), 201if __name__ == '__main__':
flaskApp.run(debug=True, port=5000)
使用 Postman 测试:
3. 返回所有用户
当用户数量较多时,直接返回所有用户可能导致性能问题。实际应用中应考虑分页。
@flaskApp.route('/api/users', methods=['GET'])defget_all_users():
users = User.query.all()
return jsonify({
'users': [user.to_dict() for user in users],
'count': len(users)
})
if __name__ == '__main__':
flaskApp.run(debug=True, port=5000)
使用 Postman 测试:
4. 返回单个用户
RESTful API 通过 URL 路径参数定位具体资源。这种方式语义清晰,符合 REST 设计原则。
@flaskApp.route('/api/users/<int:user_id>', methods=['GET'])defget_user(user_id):
user = User.query.get(user_id)
if user isNone:
return jsonify({'error': '用户不存在'}), 404return jsonify(user.to_dict())
if __name__ == '__main__':
flaskApp.run(debug=True, port=5000)
使用 Postman 测试:
5. 搜索用户
搜索是用户界面的核心功能之一,支持模糊搜索。
@flaskApp.route('/api/users/search', methods=['GET'])defsearch_users():
username = request.args.get('username', '')
email = request.args.get('email', '')
query = User.query
if username:
query = query.filter(User.username.contains(username))
if email:
query = query.filter(User.email.contains(email))
users = query.all()
return jsonify({
'users': [user.to_dict() for user in users],
'count': len(users),
'search_params': {'username': username, 'email': email}
})
if __name__ == '__main__':
flaskApp.run(debug=True, port=5000)
使用 Postman 测试:
6. 更新用户信息
以下示例实现的是 PUT 语义更新客户端提供的字段。
@flaskApp.route('/api/users/<int:user_id>', methods=['PUT'])defupdate_user(user_id):
user = User.query.get(user_id)
if user isNone:
return jsonify({'error': '用户不存在'}), 404
data = request.get_json()
if'username'in data and data['username']:
existing_user = User.query.filter(
User.username == data['username'],
User.id != user_id
).first()
if existing_user:
return jsonify({'error': '用户名已被使用'}), 409
user.username = data['username']
if'email'in data and data['email']:
existing_user = User.query.filter(
User.email == data['email'],
User.id != user_id
).first()
if existing_user:
return jsonify({'error': '邮箱已被使用'}), 409
user.email = data['email']
sqliteDb.session.commit()
return jsonify({
'message': '用户更新成功',
'user': user.to_dict()
})
if __name__ == '__main__':
flaskApp.run(debug=True, port=5000)
使用 Postman 测试:
7. 删除用户
删除操作需要谨慎处理。
@flaskApp.route('/api/users/<int:user_id>', methods=['DELETE'])defdelete_user(user_id):
user = User.query.get(user_id)
if user isNone:
return jsonify({'error': '用户不存在'}), 404
sqliteDb.session.delete(user)
sqliteDb.session.commit()
return jsonify({'message': '用户删除成功'}), 200if __name__ == '__main__':
flaskApp.run(debug=True, port=5000)