1. 快速启动与环境配置
1.1 虚拟环境(必选)
# 创建
python -m venv venv
# 激活 (Windows)
venv\\Scripts\\activate
# 激活 (Mac/Linux)
source venv/bin/activate
# 安装
pip install flask
1.2 最小应用结构
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "Hello, Flask!"
if __name__ == '__main__':
# 生产环境请勿使用 debug=True
app.run(debug=True, port=5000)
1.3 配置管理
推荐使用工厂模式 + 环境变量:
import os
from flask import Flask
def create_app(config_name=None):
app = Flask(__name__)
config_map = {
'dev': 'config.DevelopmentConfig',
'prod': 'config.ProductionConfig'
}
app.config.from_object(config_map.get(config_name, 'config.DevelopmentConfig'))
return app
2. 路由与请求处理
2.1 路由核心
| 动态参数 | /user/<int:user_id> | 支持 int, float, path, uuid |
| HTTP 方法 | methods=['GET', 'POST'] | 默认仅 GET |
| URL 构建 | url_for('index', _external=True) | 避免硬编码,支持反向解析 |
| 静态文件 | url_for('static', filename='css/style.css') | 自动映射 /static 目录 |
2.2 请求数据提取
from flask import request
# 1. 查询参数 ?key=value
val = request.args.get('key', 'default')
# 2. 表单数据 (application/x-www-form-urlencoded)
val = request.form.get('username')
# 3. JSON 数据 (application/json)
data = request.get_json(silent=True)
# 4. 文件上传
file = request.files.get('avatar')
file.save(f"uploads/{file.filename}")
3. 模板引擎 (Jinja2)
3.1 核心语法
- 变量输出:{{ user.name }}
- 控制流:{% if user.is_admin %} … {% endif %}
- 循环:{% for item in items %} … {% endfor %}
- 继承:{% extends "base.html" %} + {% block content %}{% endblock %}
3.2 安全与过滤器
- 自动转义:Flask 默认开启,防 XSS。
- 取消转义:{{ html_content | safe }}(仅用于可信内容)
- 常用过滤器:{{ date | datetimeformat }}, {{ text | truncate(50) }}
4. 数据库与 ORM (Flask-SQLAlchemy)
4.1 模型定义
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
posts = db.relationship('Post', backref='author', lazy='dynamic')
4.2 常用操作
# 增
db.session.add(user)
db.session.commit()
# 查
user = User.query.filter_by(username='admin').first()
users = User.query.filter(User.id > 10).all()
# 改
user.username = 'new_name'
db.session.commit()
# 删
db.session.delete(user)
db.session.commit()
5. 核心扩展生态
| Flask-SQLAlchemy | 数据库 ORM | 简化数据库操作 |
| Flask-Migrate | 数据库迁移 | 基于 Alembic,管理表结构变更 |
| Flask-Login | 用户认证 | 管理 current_user, 登录/登出 |
| Flask-WTF | 表单处理 | 表单验证 + CSRF 防护 |
| Flask-RESTful | API 开发 | 资源类视图,快速构建 REST API |
| Flask-Caching | 缓存 | 支持 Redis/Memcached |
6. 项目架构:蓝图 (Blueprint)
解决大型项目代码耦合问题,实现模块化。
# app/auth/views.py
from flask import Blueprint
auth_bp = Blueprint('auth', __name__, url_prefix='/auth')
@auth_bp.route('/login')
def login():
return "Login Page"
# app/__init__.py
from app.auth.views import auth_bp
def create_app():
app = Flask(__name__)
app.register_blueprint(auth_bp)
return app
7. 安全与生产部署
7.1 安全清单
7.2 生产部署方案
禁止:app.run()(Werkzeug 开发服务器性能差且不稳定)
推荐栈:
WSGI 服务器:Gunicorn (Linux) 或 Waitress (Windows)
gunicorn -w 4 -b 0.0.0.0:5000 "app:create_app()"
反向代理:Nginx
- 处理静态文件 (CSS/JS/Images)
- SSL 终止 (HTTPS)
- 负载均衡
- 转发请求到 Gunicorn
网硕互联帮助中心

评论前必须登录!
注册