Flask MVC
Flask是一个轻量级的Python Web框架,由于其简洁、灵活和易上手的特点,越来越受到开发者的青睐。MVC(Model-View-Controller)是一种软件架构模式,将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller)。在本文中,将详细解释如何在Flask应用中使用MVC模式。
MVC概念介绍
模型(Model)
模型是应用程序的核心部分,负责处理数据的存储和操作。在Flask应用中,可以使用ORM(对象关系映射)来表示模型,ORM可以将数据库中的表映射为Python中的类,实现数据的持久化存储。常用的ORM库有SQLAlchemy、Peewee等。
视图(View)
视图是用户界面的呈现部分,负责向用户展示数据和接收用户的输入。在Flask中,通常使用Jinja2模板引擎来渲染视图,Jinja2提供了模板继承、控制结构等功能,使得页面的设计更加灵活。
控制器(Controller)
控制器负责处理用户的请求和调度模型、视图之间的交互。在Flask中,可以使用路由(Route)来定义控制器,路由将URL映射到相应的视图函数,实现用户请求的响应。
在Flask中应用MVC
项目结构
一个典型的Flask项目通常具有以下目录结构:
project/
├─ app/
│ ├─ models/
│ ├─ views/
│ └─ controllers/
├─ static/
├─ templates/
└─ run.py
app/models/
:存放模型类,用于处理数据的操作。app/views/
:存放视图模板,用于界面的呈现。app/controllers/
:存放控制器,用于处理用户请求和调度模型、视图之间的交互。static/
:存放静态文件,如CSS、JavaScript等。templates/
:存放Jinja2模板文件。run.py
:Flask应用的启动文件。
编写模型
在app/models/
目录下创建一个模型类,通过ORM库创建数据表和操作数据。以SQLAlchemy为例,创建一个用户模型:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(50), unique=True)
def __repr__(self):
return f'<User {self.username}>'
编写视图
在templates/
目录下创建一个Jinja2模板文件,用于呈现页面的内容。以一个简单的用户列表页面为例,创建一个users.html
文件:
<!DOCTYPE html>
<html>
<head>
<title>User List</title>
</head>
<body>
<h1>User List</h1>
<ul>
{% for user in users %}
<li>{{ user.username }}</li>
{% endfor %}
</ul>
</body>
</html>
编写控制器
在app/controllers/
目录下创建一个控制器,定义视图函数和路由。以一个用户列表页面为例,创建一个user_controller.py
文件:
from flask import render_template
from app.models import User
def user_list():
users = User.query.all()
return render_template('users.html', users=users)
在run.py
文件中导入控制器,并定义路由:
from flask import Flask
from app.controllers.user_controller import user_list
from app.models import db
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
db.init_app(app)
@app.route('/')
def index():
return user_list()
if __name__ == '__main__':
app.run()
运行示例
- 安装Flask和SQLAlchemy库:
pip install Flask Flask-SQLAlchemy
- 创建数据库表:
from run import db
db.create_all()
- 运行Flask应用:
python run.py
通过浏览器访问http://localhost:5000/
,即可查看用户列表页面。
总结
通过以上示例,我们了解了如何在Flask应用中应用MVC模式,将应用分为模型、视图和控制器三个部分,实现数据的存储、页面的展示和用户请求的处理。MVC模式能够使项目结构更加清晰,代码更加具有可维护性和可扩展性,是开发Web应用的良好实践。