1. 环境配置与项目初始化

1.1 Python环境准备

在开始Flask之旅前,确保已安装Python 3.7+版本。推荐使用虚拟环境隔离项目依赖:

# 创建项目目录并进入
mkdir my_flask_app && cd my_flask_app

# 创建虚拟环境(Windows使用python -m venv venv)
python3 -m venv venv

# 激活虚拟环境
source venv/bin/activate  # Linux/macOS
venv\Scripts\activate      # Windows

1.2 安装Flask核心包

在激活的虚拟环境中执行:

pip install flask

1.3 创建基础项目结构

建议采用以下目录结构:

/my_flask_app
    /venv
    /app
        /templates
        /static
        __init__.py
        routes.py
    config.py
    requirements.txt

2. 第一个Flask应用

2.1 基础路由示例

创建app/init.py:

from flask import Flask

def create_app():
    app = Flask(__name__)
    app.config['SECRET_KEY'] = 'your-secret-key-here'

    # 注册蓝图(后续章节会展开讲解)
    from .routes import main_bp
    app.register_blueprint(main_bp)

    return app

创建app/routes.py:

from flask import Blueprint, jsonify

main_bp = Blueprint('main', __name__)

@main_bp.route('/')
def home():
    return '<h1>欢迎来到Flask世界!</h1>'

@main_bp.route('/api/data')
def get_data():
    return jsonify({
        'status': 'success',
        'data': [1, 2, 3, 4, 5]
    })

2.2 启动应用

在项目根目录创建run.py:

from app import create_app

app = create_app()

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=5000)

3. 模板引擎,Jinja2基础使用

在templates目录创建index.html:

<!DOCTYPE html>
<html>
<head>
    <title>{{ title }}</title>
</head>
<body>
    <h1>{{ welcome_message }}</h1>
    <ul>
        {% for item in navigation %}
        <li><a href="{{ item.url }}">{{ item.label }}</a></li>
        {% endfor %}
    </ul>
</body>
</html>

更新routes.py:

@main_bp.route('/template-demo')
def template_demo():
    return render_template('index.html',
                         title='模板演示',
                         welcome_message='欢迎学习Jinja2模板',
                         navigation=[
                             {'url': '/', 'label': '首页'},
                             {'url': '/about', 'label': '关于'}
                         ])

4. 使用WTForms增强表单

安装扩展:

pip install flask-wtf

创建forms.py:

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Length

class LoginForm(FlaskForm):
    username = StringField('用户名', 
                         validators=[DataRequired(), 
                                   Length(min=4, max=20)])
    password = PasswordField('密码',
                            validators=[DataRequired(),
                                      Length(min=6)])
    submit = SubmitField('登录')

更新路由:

@main_bp.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        # 处理登录逻辑
        return redirect(url_for('main.home'))
    return render_template('login.html', form=form)

5. 数据库集成(SQLAlchemy)

5.1 配置数据库

安装扩展:

pip install flask-sqlalchemy

更新config.py:

class Config:
    SQLALCHEMY_DATABASE_URI = 'sqlite:///site.db'
    SQLALCHEMY_TRACK_MODIFICATIONS = False

更新__init__.py:

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

def create_app():
    app = Flask(__name__)
    app.config.from_object(Config)
    
    db.init_app(app)
    
    # ...其他配置...

5.2 定义数据模型

创建models.py:

from app import db

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    
    def __repr__(self):
        return f"User('{self.username}', '{self.email}')"

6. 应用场景与技术选型

6.1 典型应用场景

  • RESTful API开发
  • 中小型Web应用
  • 微服务架构中的服务单元
  • 快速原型开发
  • 教育领域教学演示

6.2 技术优缺点分析

优势:

  • 轻量级核心,扩展灵活
  • 文档完善,社区活跃
  • 与Python生态无缝集成
  • 适合渐进式开发

不足:

  • 大规模项目需要自行架构设计
  • 原生功能较为基础
  • 异步支持需要额外扩展

7. 注意事项

  1. 生产环境必须关闭调试模式
  2. 使用环境变量管理敏感配置
  3. 定期维护依赖版本
  4. 合理使用蓝图组织大型项目
  5. 注意SQL注入等安全防护

8. 总结与展望

通过本文的系统学习,我们完成了Flask开发环境的搭建、基础项目的创建、模板引擎的使用、表单处理以及数据库集成的完整流程。Flask的"微核心"设计哲学使其成为Python Web开发领域的长青树,建议后续可以继续探索以下方向:

  • Flask RESTful扩展开发API
  • 使用Celery实现异步任务
  • 结合React/Vue构建前后端分离应用
  • 部署到生产环境的最佳实践