flask实现mvc模式
Flask 默认是一个轻量级框架,并不强制使用 MVC 模式,但我们可以按照 MVC 结构来组织代码,使项目更加清晰和可维护。
Flask 实现 MVC 模式
Flask 本身并没有严格的 Controller
层,但我们可以通过 视图函数(View Functions) 充当 Controller,使其符合 MVC 模式。
目录结构
flask_mvc_app/
│── app/
│ ├── models.py # Model (数据库模型)
│ ├── views.py # View (视图逻辑)
│ ├── controllers.py # Controller (路由 & 业务逻辑)
│ ├── templates/ # HTML 模板 (Jinja2)
│ │ ├── index.html
│ ├── static/ # 静态文件 (CSS, JS, images)
│── app.py # 入口文件
│── config.py # 配置文件
│── requirements.txt # 依赖库
1. Model(模型层)
数据库模型(使用 Flask-SQLAlchemy)
# app/models.py
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class Product(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), nullable=False)
price = db.Column(db.Float, nullable=False)
stock = db.Column(db.Integer, default=0)
def __repr__(self):
return f"<Product {self.name}>"
2. Controller(控制器层)
控制器(定义路由和业务逻辑)
# app/controllers.py
from flask import render_template
from app.models import Product
def get_products():
products = Product.query.all()
return render_template("index.html", products=products)
3. View(视图层)
前端 HTML 模板(使用 Jinja2)
<!-- app/templates/index.html -->
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>商品列表</title>
</head>
<body>
<h1>商品列表</h1>
<ul>
{% for product in products %}
<li>{{ product.name }} - ¥{{ product.price }} (库存: {{ product.stock }})</li>
{% endfor %}
</ul>
</body>
</html>
4. Flask 入口文件
# app.py
from flask import Flask
from app.models import db
from app.controllers import get_products
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///products.db"
db.init_app(app)
@app.route("/")
def index():
return get_products()
if __name__ == "__main__":
with app.app_context():
db.create_all() # 创建数据库表
app.run(debug=True)
运行 Flask MVC 项目
- 安装 Flask 及其扩展:
pip install flask flask-sqlalchemy
- 运行应用:
python app.py
- 打开浏览器访问
http://127.0.0.1:5000/
,即可看到商品列表。
总结
层次 | Flask 实现方式 |
---|---|
Model(模型) | models.py 里定义数据库模型(使用 Flask-SQLAlchemy) |
View(视图) | templates/ 目录中的 HTML 模板 |
Controller(控制器) | controllers.py 处理路由逻辑,调用 Model 并返回 View |
这样组织代码后,Flask 也能遵循 MVC 模式,使代码结构清晰、易维护! 🚀