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. 注意事项
- 生产环境必须关闭调试模式
- 使用环境变量管理敏感配置
- 定期维护依赖版本
- 合理使用蓝图组织大型项目
- 注意SQL注入等安全防护
8. 总结与展望
通过本文的系统学习,我们完成了Flask开发环境的搭建、基础项目的创建、模板引擎的使用、表单处理以及数据库集成的完整流程。Flask的"微核心"设计哲学使其成为Python Web开发领域的长青树,建议后续可以继续探索以下方向:
- Flask RESTful扩展开发API
- 使用Celery实现异步任务
- 结合React/Vue构建前后端分离应用
- 部署到生产环境的最佳实践