云计算百科
云计算领域专业知识百科平台

Flask 核心速查与实战手册


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 安全清单

  • SECRET_KEY:必须设置强随机密钥,用于 Session 签名。
  • CSRF:所有表单必须包含 CSRF Token (Flask-WTF)。
  • 密码存储:禁止明文,使用 werkzeug.security.generate_password_hash。
  • 输入验证:永远不要信任客户端数据,后端必须校验。
  • 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

  • 8. 实战学习路径

  • 入门:个人博客(路由、模板、SQLite、CRUD)
  • 进阶:用户系统(注册/登录/权限/邮箱验证/头像上传)
  • 高阶:RESTful API(JSON 响应、Swagger 文档、Redis 缓存、Celery 异步任务)
  • 架构:微服务拆分、Docker 容器化部署、CI/CD 流水线

  • 赞(0)
    未经允许不得转载:网硕互联帮助中心 » Flask 核心速查与实战手册
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!