Flask 是一个轻量级的 Python Web 框架,以简洁和灵活性著称。
1. Flask 核心特点
- 轻量级:核心功能简单,通过扩展实现复杂需求。
- 灵活:开发者可自由选择组件(如数据库、模板引擎)。
- WSGI 兼容:基于 Werkzeug WSGI 工具库。
- 开发友好:内置调试器和开发服务器。
2. 安装 Flask
pip install flask
3. 基本应用结构
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello, World!'
if __name__ == '__main__':
app.run(debug=True) # 开启调试模式
4. 核心概念
路由(Routing)
- 定义 URL 到视图函数的映射:
@app.route('/user/<username>') def show_user(username): return f'User: {username}'
- 支持变量规则(如
<int:id>
、<path:subpath>
)。
- 支持变量规则(如
视图函数
- 处理请求并返回响应(字符串、HTML、JSON 等)。
模板引擎(Jinja2)
- 渲染动态 HTML:
from flask import render_template @app.route('/template') def template_demo(): return render_template('index.html', name='Alice')
静态文件
- 默认存储在
static
目录,通过/static/filename
访问。
5. 请求与响应
获取请求数据
from flask import request
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
else:
username = request.args.get('username')
return f'User: {username}'
返回响应
- 可自定义状态码、头部:
return 'Not Found', 404, {'Header': 'Value'}
重定向与 URL 生成
from flask import redirect, url_for
@app.route('/redirect')
def redirect_example():
return redirect(url_for('hello')) # 重定向到 hello 视图
6. 数据库集成
- 常用扩展:
Flask-SQLAlchemy
(ORM)、Flask-Migrate
(数据库迁移)。 - 示例配置:
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///mydb.db' db = SQLAlchemy(app) class User(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50))
7. 用户认证与会话
- 会话管理:使用
session
对象(需设置密钥):app.secret_key = 'your_secret_key' @app.route('/set_session') def set_session(): session['user'] = 'Alice' return 'Session set'
- 扩展推荐:
Flask-Login
(用户登录管理)。
8. 常用扩展
Flask-WTF
:表单处理。Flask-Mail
:发送邮件。Flask-RESTful
:构建 REST API。Flask-CORS
:跨域资源共享。
9. 部署生产环境
- 服务器:使用 Gunicorn 或 uWSGI。
- 反向代理:搭配 Nginx 或 Apache。
- 云平台:部署到 Heroku、AWS、Docker 等。
10. 学习资源
- 官方文档:Flask Documentation
- 书籍:《Flask Web开发实战》(Miguel Grinberg)
Flask 的简洁性使其成为快速开发小型项目和原型设计的理想选择,同时通过扩展也能满足企业级需求。