Flask 是一个轻量级的 Python Web 框架,它被称为"微框架"(microframework),因为它核心简单但可扩展性强。Flask 由 Armin Ronacher 开发,基于 Werkzeug WSGI 工具包和 Jinja2 模板引擎。
在Python的Flask框架中,代码结构通常遵循MVC(Model-View-Controller)或类似的设计模式,尽管Flask本身并不强制使用MVC模式,但它提供了足够的灵活性来支持这种结构。下面是一个基本的Flask应用的结构示例,其中包括了MVC的概念和一些常见的文件组织方式。
一、项目结构:
bash
/my_flask_app
/app
__init__.py
models.py
views.py
forms.py
/static
/css
/js
/images
/templates
base.html
index.html
about.html
config.py
run.py
二、主要文件说明
app/__init__.py
python
from flask import Flask
from .views import main_blueprint # 导入蓝图
def create_app():
app = Flask(__name__)
app.config.from_object('config.DevelopmentConfig') # 加载配置
# 注册蓝图
app.register_blueprint(main_blueprint)
return app
app/models.py
python
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)
email = db.Column(db.String(120), unique=True, nullable=False)
app/views.py
(或称为 controllers)
python
from flask import Blueprint, render_template, request, redirect, url_for
from .models import db, User # 导入模型和数据库对象
from .forms import LoginForm # 导入表单类(如果使用)
main_blueprint = Blueprint('main', __name__) # 创建蓝图对象
@main_blueprint.route('/')
def index():
return render_template('index.html')
@main_blueprint.route('/about')
def about():
return render_template('about.html')
app/forms.py
python
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Email, EqualTo, Length
class LoginForm(FlaskForm):
username = StringField('Username', validators=[DataRequired()])
password = PasswordField('Password', validators=[DataRequired()])
submit = SubmitField('Log In')
config.py
python
class Config:
DEBUG = False
TESTING = False
SECRET_KEY = 'your_secret_key' # 用于会话加密的密钥,应保持安全并更改生产环境的值。
SQLALCHEMY_DATABASE_URI = 'sqlite:///your-database-path' # 数据库URI配置。例如:'sqlite:///app.db' 或 'mysql://user:password@localhost/db_name' 等。
SQLALCHEMY_TRACK_MODIFICATIONS = False # 关闭对模型修改的跟踪,减少内存消耗。
# 其他配置...
run.py
或 __main__.py
(启动文件)
python
from app import create_app # 从初始化文件导入create_app函数。确保你的初始化文件中有这个函数。
from app.models import db # 导入数据库对象,用于创建表等操作。如果使用SQLAlchemy扩展。
import os # 可能需要导入os来设置环境变量等。例如:os.environ['FLASK_ENV'] = 'development'。根据需要使用。
import click # 可选:用于创建命令行接口。例如,用于数据库迁移等操作。如果使用,需要安装click库。pip install click。然后可以添加命令



主要特点
-
轻量级:核心功能简单,没有默认的数据库、表单验证等组件
-
灵活可扩展:可以通过扩展添加所需功能
-
易于学习:API 设计简洁,文档完善
-
开发快速:适合快速原型开发和小型项目
-
Jinja2 模板引擎:内置强大的模板系统
-
内置开发服务器和调试器:方便开发和测试
基本组件
-
路由系统:将 URL 映射到 Python 函数
-
模板引擎:Jinja2,支持模板继承
-
请求和响应对象:处理 HTTP 请求和响应
-
会话管理:支持客户端会话
-
扩展支持:数据库、表单验证、认证等通过扩展实现
常用扩展
-
Flask-SQLAlchemy:数据库ORM
-
Flask-WTF:表单处理
-
Flask-Login:用户认证
-
Flask-RESTful:构建REST API
-
Flask-Mail:发送邮件
-
Flask-Migrate:数据库迁移
适用场景
-
小型到中型Web应用
-
微服务架构
-
RESTful API 开发
-
快速原型开发
-
作为大型应用的前端服务
与Django的比较
特性 | Flask | Django |
---|---|---|
类型 | 微框架 | 全功能框架 |
灵活性 | 高 | 较低 |
学习曲线 | 平缓 | 较陡峭 |
内置功能 | 少 | 多(ORM,admin等) |
适用项目 | 小型,API,灵活需求 | 大型,传统Web应用 |