使用 MVC 架构构建 Flask CRUD 应用程序
Posted DisonTangor
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用 MVC 架构构建 Flask CRUD 应用程序相关的知识,希望对你有一定的参考价值。
【转自 Felipe Silveira 的《Build a Flask CRUD Application with MVC Architecture》(翻译)】
如何用 Flask 的 Blueprint 实现一个 CRUD 的应用
我多年来一直在开发和生产应用程序中使用 Node.js,最近我开始专注于使用 Flask 的全栈 Web 开发。
我记得我的第一个实践 Node.js 项目,现在与 Flask 相比,它的开发速度要快得多。碰巧的是,在使用 Flask 时,我在实现一个简单的 CRUD 应用程序时被卡住了很多次,主要是在如何使用 Python 构建项目方面。
特别是,我已经使用 Python 实现了许多机器学习应用程序。在我看来,它是最好的语言。但是,在实现 CRUD 和/或 API 项目时,我仍然更喜欢 Node.js。
总的来说,请注意本教程的重点不是解释什么是 CRUD 应用程序,也不是它的方法。它只是关于如何按照 MVC 架构实现应用程序的指南。
我试图尽可能地将它与 NodeJS 应用程序相关联,希望你喜欢它。如有任何意见或建议,请随时与我联系。
为了构建这个应用程序,我们首先需要了解 CLIENT/SERVER 的基本思想。
- 客户端向服务器发送请求。
- 服务器接收客户端请求,向数据库发送请求,数据库发送回响应。
- 在操作数据库响应之后,服务器然后向客户端发送响应。
在这种方法中,服务器响应返回客户端请求的整个页面。例如,请求页面会为此/users
返回所有 html、CSS 和 JS。对它的实际理解是render_template
来自烧瓶的方法。
请记住,此格式仅限于特定客户端。由于服务器呈现 HTML、CSS 和 JS,因此 android 或 ios 客户端无法处理它。作为一种解决方案,经常使用 RESTful API,从而消除了呈现模板的后端责任。
项目结构
本教程假设您已经在计算机上安装了 Python、PostgreSQL 和 Flask。之后,请在您的项目文件夹中创建以下结构。
project/
|
├── templates/
| └── index.html
|
├── migrations/ **
| └── ...
|
├── routes/
| └── user_bp.py
|
├── models/
| └── User.py
|
├── controllers/
| └── UserController.py
|
├── app.py
└── config.py
- * 从命令自动创建
flask db init
。
如果你从另一个框架,你可能已经注意到了瓶CLI是用来设置的东西,如FLASK_APP=app.py
和FLASK_ENV=development
,但不会自动为我们创建这个结构。
现在,让我们开始编写代码。
在src/app.py中
from flask import Flask, render_template
from flask_migrate import Migrate
from models.User import db
from routes.user_bp import user_bp
app = Flask(__name__)
app.config.from_object(\'config\')
db.init_app(app)
migrate = Migrate(app, db)
app.register_blueprint(user_bp, url_prefix=\'/users\')
@app.route(\'/\')
def index():
return render_template(\'index.html\')
if __name__ == \'__main__\':
app.debug = True
app.run()
在src/config.py中:
import os
SECRET_KEY = os.urandom(32)
# Grabs the folder where the script runs.
basedir = os.path.abspath(os.path.dirname(__file__))
# Enable debug mode.
DEBUG = True
# Connect to the database
SQLALCHEMY_DATABASE_URI = \'your psycopg2 URI connection\'
# Turn off the Flask-SQLAlchemy event system and warning
SQLALCHEMY_TRACK_MODIFICATIONS = False
在 src/models/User.py中:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class User(db.Model):
__tablename__ = \'users\'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
age = db.Column(db.String(120))
address = db.Column(db.String(120))
@property
def serialize(self):
return {
\'id\': self.id,
\'name\': self.name,
\'city\': self.city,
\'state\': self.state,
\'address\': self.address
}
之后,您可以运行以下命令:
flask db init
: 它将创建带有版本子文件夹的迁移文件夹。flask db migrate
: 它将通过升级和降级逻辑设置检测模型更改。flask db upgrade
: 它将应用您已实施的模型更改。flask db downgrade
: 如果出现问题,您可以使用此命令取消应用您对模型文件所做的更改。
路线:
如您所见,路由通常使用控制器功能编写
@app.route(\'/\', methods =[\'GET\'])
def index():
...
@app.route(\'/create\', methods =[\'POST\'])
def store():
...
...
但是,由于我们希望按照 MVC 架构来组织它,因此需要进行一些更改。为此,Blueprint
可以用作解决方案。它负责将代码拆分为不同的模块,从而更好地维护并提高可扩展性。
在src/routes/user_bp.py 中:
from flask import Blueprint
from controllers.UserController import index, store, show, update, destroy
user_bp = Blueprint(\'user_bp\', __name__)
user_bp.route(\'/\', methods=[\'GET\'])(index)
user_bp.route(\'/create\', methods=[\'POST\'])(store)
user_bp.route(\'/<int:user_id>\', methods=[\'GET\'])(show)
user_bp.route(\'/<int:user_id>/edit\', methods=[\'POST\'])(update)
user_bp.route(\'/<int:user_id>\', methods=[\'DELETE\'])(destroy)
回到app.py
,你可能注意到在app.register_blueprint(user_bp, url_prefix=\'/users\')
中蓝图正被注册
在src/controllers/UserController.py中
# pseudo code
import sys
from flask import render_template, redirect, url_for, request, abort
from models.User import User
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
def index():
...
def store():
...
def show(userId):
...
def update(userId):
...
def delete(userId):
...
编写完所有必要的方法后,您可以使用命令flask run
或运行项目python app.py
。最后,您可以检查您的项目是否在http://localhost:5000/正确运行
本教程侧重于指导您进行后端实现,如果您想了解前端部分的详细信息,请为第二个教程发表评论。
我希望我已经向您展示了使用 Flask 实现 CRUD 应用程序是多么容易,就像使用 Node.js 一样。谢谢阅读!
以上是关于使用 MVC 架构构建 Flask CRUD 应用程序的主要内容,如果未能解决你的问题,请参考以下文章