MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式: [1]
- Model(模型)表示应用程序核心(比如数据库记录列表)。
- View(视图)显示数据(数据库记录)。
- Controller(控制器)处理输入(写入数据库记录)。
MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制。
Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。 通常模型对象负责在数据库中存取数据。
View(视图)是应用程序中处理数据显示的部分。 通常视图是依据模型数据创建的。
Controller(控制器)是应用程序中处理用户交互的部分。
通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
MVC 分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,您可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。
MVC 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。
下面给出了一个用PyQt5写的登录窗口,基于MVC模式构建:
Python
代码语言:javascript复制import sys
from functools import partial
from PyQt5 import QtCore, QtGui, QtWidgets
class Model:
def __init__(self):
self.username = ""
self.password = ""
def verify_password(self):
return self.username == "USER" and self.password == "PASS"
class View(QtWidgets.QWidget):
verifySignal = QtCore.pyqtSignal()
def __init__(self):
super(View, self).__init__()
self.username = ""
self.password = ""
self.initUi()
def initUi(self):
lay = QtWidgets.QVBoxLayout(self)
title = QtWidgets.QLabel("<b>LOGIN</b>")
lay.addWidget(title, alignment=QtCore.Qt.AlignHCenter)
fwidget = QtWidgets.QWidget()
flay = QtWidgets.QFormLayout(fwidget)
self.usernameInput = QtWidgets.QLineEdit()
self.usernameInput.textChanged.connect(partial(setattr, self, "username"))
self.passwordInput = QtWidgets.QLineEdit(echoMode=QtWidgets.QLineEdit.Password)
self.passwordInput.textChanged.connect(partial(setattr, self, "password"))
self.loginButton = QtWidgets.QPushButton("Login")
self.loginButton.clicked.connect(self.verifySignal)
flay.addRow("Username: ", self.usernameInput)
flay.addRow("Password: ", self.passwordInput)
flay.addRow(self.loginButton)
lay.addWidget(fwidget, alignment=QtCore.Qt.AlignHCenter)
lay.addStretch()
def clear(self):
self.usernameInput.clear()
self.passwordInput.clear()
def showMessage(self):
messageBox = QtWidgets.QMessageBox(self)
messageBox.setText("your credentials are validn Welcome")
messageBox.exec_()
self.close()
def showError(self):
messageBox = QtWidgets.QMessageBox(self)
messageBox.setText("your credentials are not validnTry again...")
messageBox.setIcon(QtWidgets.QMessageBox.Critical)
messageBox.exec_()
class Controller:
def __init__(self):
self._app = QtWidgets.QApplication(sys.argv)
self._model = Model() # 初始化模型
self._view = View() # 初始化视图
self.init()
def init(self):
self._view.verifySignal.connect(self.verify_credentials)
def verify_credentials(self):
self._model.username = self._view.username
self._model.password = self._view.password
self._view.clear()
if self._model.verify_password():
self._view.showMessage()
else:
self._view.showError()
def run(self):
self._view.show()
return self._app.exec_()
if __name__ == '__main__':
c = Controller() # 调用控制器
sys.exit(c.run())