1. Flask HTTP服务器概述
Flask是一个轻量级的Python Web框架,以其简洁性和灵活性著称。它内置了一个开发用的WSGI服务器(Werkzeug),可以快速搭建HTTP服务。虽然生产环境通常会搭配Nginx等专业服务器,但Flask自带的服务器完全能满足开发测试需求。
注意:Flask开发服务器默认是单线程的,不适合高并发场景。如需处理并发请求,需要启用多线程模式或使用生产级服务器。
2. 环境准备与安装
2.1 Python环境配置
建议使用Python 3.7+版本,通过以下命令检查Python和pip是否就绪:
bash复制python --version
pip --version
2.2 安装Flask
使用pip安装最新版Flask:
bash复制pip install flask
验证安装:
python复制import flask
print(flask.__version__)
3. 基础HTTP服务器实现
3.1 最小化应用
创建一个最基本的Flask应用(app.py):
python复制from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, World!"
if __name__ == '__main__':
app.run()
启动服务器:
bash复制python app.py
3.2 关键参数说明
__name__:告诉Flask当前模块的名称@app.route:定义URL路由规则app.run():启动开发服务器,默认监听127.0.0.1:5000
4. 进阶配置与功能
4.1 多线程支持
启用多线程处理并发请求:
python复制app.run(threaded=True)
或者指定工作线程数:
python复制from werkzeug.serving import ThreadedWSGIServer
server = ThreadedWSGIServer('0.0.0.0', 5000, app)
server.serve_forever()
4.2 路由与请求处理
python复制@app.route('/user/<username>')
def show_user(username):
return f'User {username}'
@app.route('/post/<int:post_id>')
def show_post(post_id):
return f'Post {post_id}'
4.3 请求方法与表单处理
python复制from flask import request
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
return f"User {request.form['username']} logged in"
return '''
<form method="post">
<input type="text" name="username">
<input type="submit">
</form>
'''
5. 性能优化技巧
5.1 静态文件缓存
python复制from flask import send_from_directory
@app.route('/static/<path:filename>')
def static_files(filename):
return send_from_directory('static', filename, cache_timeout=3600)
5.2 启用压缩
安装Flask-Compress:
bash复制pip install flask-compress
配置压缩:
python复制from flask_compress import Compress
Compress(app)
6. 常见问题与解决方案
6.1 端口冲突
如果默认5000端口被占用:
python复制app.run(port=5001)
6.2 跨域问题
安装flask-cors扩展:
bash复制pip install flask-cors
配置CORS:
python复制from flask_cors import CORS
CORS(app)
6.3 性能监控
使用Flask-Profiler:
python复制from flask_profiler import Profiler
profiler = Profiler()
profiler.init_app(app)
7. 生产环境部署建议
虽然开发服务器方便,但生产环境建议:
- 使用Gunicorn+Gevent:
bash复制pip install gunicorn gevent
gunicorn -k gevent -w 4 app:app
- 配合Nginx反向代理
- 启用HTTPS加密
- 配置日志轮转
8. 完整示例代码
python复制from flask import Flask, request, jsonify
from werkzeug.serving import ThreadedWSGIServer
app = Flask(__name__)
@app.route('/')
def home():
return "Welcome to Flask HTTP Server"
@app.route('/api/data', methods=['POST'])
def process_data():
data = request.get_json()
return jsonify({"status": "success", "data": data})
if __name__ == '__main__':
server = ThreadedWSGIServer('0.0.0.0', 5000, app)
print("Server running on http://0.0.0.0:5000")
server.serve_forever()
这个示例展示了:
- 基础路由处理
- JSON API接口
- 多线程服务器
- 完整的启动配置
