Python Web应用中的模型-视图-控制器(MVC)2025年1月4日 | 阅读 8 分钟 如果您对 Web 编程感兴趣,您可能已经遇到过缩写 MVC,它代表 Model-View-Controller(模型-视图-控制器)。由于许多 Python 在线框架甚至桌面应用程序都使用它,您可能知道它是一种普遍的设计模式。 但它到底是什么意思?如果您觉得这个概念很难理解,请继续阅读。 本文将教您
也许您是看着乐高长大的,或者您现在仍然是乐高的忠实粉丝。因此,即使您从未将两块乐高积木拼在一起,也请继续阅读,因为这个类比可能仍然是您知识的一个有用的基础。 用乐高解释 Model-View-Controller 模式想象一下,您 10 岁时坐在客厅的地板上。您面前放着一个装满乐高或类似模块化建筑组件的大桶。有各种尺寸和形状的积木
拥有如此多的不同乐高零件,您可以创造出任何东西! 当您的思绪开始涌现各种可能性时,您听到了沙发那边传来的动静。是您的哥哥,他想要某样东西。他说:“嘿!给我造一艘宇宙飞船!” 您对自己说:“嗯,这可能很有趣。”这是一艘宇宙飞船! 于是您开始动手。您开始拿出您认为需要的所有乐高积木。有些大的,有些小的。宇宙飞船的引擎和外壳有不同的颜色。 现在您已经准备好了所有零件,该组装这艘宇宙飞船了。然后,经过几个小时的辛勤努力,这艘宇宙飞船就在您面前了 ![]() 您飞快地找到您的哥哥,并将完成的项目展示给他。“干得漂亮!”他赞叹道。然后他沉默地补充道 您能否想象,使用 MVC 设计模式创建一个 Web 应用程序就像用乐高积木搭建东西一样? 用户发送请求 在乐高宇宙飞船的例子中,是您的哥哥提出了制作东西的请求。当用户想要访问 Web 应用程序中的某个特定页面时,他们会通过提供 URL 来实现。 控制器解释请求 在为您的哥哥组装乐高宇宙飞船时,您就是控制器。您编写的代码就是 Web 应用程序中的控制器。 控制器负责理解请求并对其采取行动。控制器负责收集和整理所有需要的构建零件。 模型制作产品 模型是各种各样的乐高积木。您需要不同形状和尺寸的积木来组装宇宙飞船。模型帮助 Web 应用程序的控制器从数据库中检索所有需要的数据来创建产品。 一旦控制器利用模型获取相关对象,构建最终结果所需的一切都已就位。 视图代表最终产品 宇宙飞船是乐高例子中的视图。您的哥哥,那个提出请求的人,只能看到最终结果。 用户在浏览器中看到的页面称为 Web 应用程序中的视图。 总结您的乐高之旅 您已经建造了一艘宇宙飞船,赢得了哥哥的赞赏,并将 MVC 模式与 Web 应用程序开发联系起来。您可以在每次需要提醒自己这个故事与 Web 开发之间的联系时参考这个简短的摘要。 用乐高搭建时
这些是标准流程。这些可以重复用于创建各种形状和颜色的乐高结构。 现在,您已经将这幅精心着色的画面牢记于心,您可以回过头来将其与 Web 应用程序版本的流程进行比较。 开发 Web 应用时
同样,您的 Web 应用程序会反复执行这些通用操作,为您的客户提供各种页面和信息。 以下是进一步的总结,以表格形式呈现
做得好!您已将此示例铭记于心,为理解 Model-View-Controller 架构奠定了坚实的基础。然后,您可以进一步深入,从技术角度分析一切,特别是 Python Web 编程。 探索 Python Web 开发中的 Model-View-Controller 模式当您在浏览器中输入 URL 来访问 Web 应用程序时,会发出访问应用程序中特定页面的请求。但是,程序如何确定要渲染和显示的页面呢? 在创建 Web 应用程序时,您会定义所谓的路由。路由本质上是与不同页面关联的 URL 模式。因此,程序会在后台尝试将用户输入的给定 URL 与预先建立的路由进行匹配。 控制器、模型、视图和路由是这其中涉及的四个主要元素。 路由请求 每个路由都附加有一个控制器。更准确地说,它连接到一个特定的控制器动作,该动作是控制器内部的一个函数。因此,程序会查找与您输入的 URL 匹配的路由。如果成功,将调用与该路由关联的控制器动作。 使用一个简单的 Flask 路由作为示例,您可以开始理解 Model-View-Controller 模式在 Python Web 开发中是如何工作的。 在这里,您定义了 home() 视图函数(本质上是一个控制器动作)与基本路由 (“/”) 之间的关系。当用户请求该基本路由时,您的 Web 应用程序将调用 home()。 用于编码的控制器和模型 通常,您会在控制器动作中执行两个主要操作:
通常,您会将从模型获取的信息附加到一个数据结构中,例如字典或列表。接下来是将该数据结构发送到视图。 继续将这些功能添加到您的 Flask 示例应用中。 在您修改的视图函数中,第 6 到 8 行是从数据库检索数据。此代码片段中的 get_db() 方法是数据库连接函数的占位符。此函数中的代码必须编写成与您打算使用的数据库兼容,例如 Python SQL 包。 注意:尽管这些示例中的代码理论上演示了 Flask 应用的运行方式,但实际上它本身并不这样运行。您可以通过下载材料存储库来获取一个可运行的 Flask 示例应用,该存储库还包含用于创建交互式 SQLite 数据库的脚本以及所需的 Flask 样板代码。您将第 8 行生成的列表分配给 entries 变量。然后,第 9 行将列表发送到 index.html 模板,在模板中,一个名为 entries 的变量用于使数据可用。 构建视图 最后,您的视图表示在 index.html 文件中。由于您通过控制器动作将数据结构发送到那里,因此您现在可以在模板文件中访问数据。然后,您可以使用数据结构中的信息来生成用户最终将在浏览器中看到的页面的 HTML 内容。 您可以使用 Flask 示例应用中的 Jinja 语法来循环遍历 entries 并显示每个条目。 如果您数据库中有条目,您的用户将看到所有条目按顺序显示。在第 9 行,您包含了一个可选的 else 子句,该子句在尚未创建任何条目的情况下,会生成一条描述性文本消息。 总结 Model-View-Controller 模式您现在已经完成了 Model-View-Controller 范式的另一个周期,这一次以 Flask Web 框架(Python)为参考。下面提供了对 MVC 请求过程更全面、更技术性的概述。
虽然这两种方法不完全相同,但也许您可以在为哥哥制作乐高宇宙飞船时识别出它们之间的概念相似之处。 您可以在此处下载代码,以尝试 Flask 示例应用程序并了解使该应用程序正常运行所需的其他代码。 结论现在是时候告别您玩乐高的过去。您以前往,寻找回忆和比喻,然后您利用它们来加深对 Python Web 应用程序开发中使用的 Model-View-Controller (MVC) 范式的理解。 下一个主题用于 NLP 的 Web 嵌入 |
简介:在本教程中,我们将学习 Python 中 print() 函数的 sep 参数。Python 中 print() 函数的参数分隔符默认设置为空格(软空格功能),可以更改并设置为任何字符、数字……
阅读 4 分钟
简介 CRT 是一个数学概念,它求解模同余系统。它通常在数论和密码学中用于快速模运算计算。在本文中,我们将使用 Python 中的逆模方法讨论中国剩余定理的应用。CRT 是什么?CRT….
阅读 3 分钟
在当今的科技世界中,速度和性能至关重要。随着事实和任务变得越来越复杂,以及同时执行多个操作的需求不断增长,并行化已变得至关重要。尽管 Python 以其简单性而闻名,但它提供了强大的工具和模块用于并行编程。这….
阅读9分钟
?可视化数据时,您可能会遇到需要在同一图表上绘制多条线的情况,其中一些线会重叠。重叠的线可能会使区分它们变得困难,但使用正确的技术,您可以创建清晰且信息丰富的...
阅读 3 分钟
Python 提供了通过索引列表的简单过程来访问 Python 列表中元素的简单解决方案。可以使用索引号和 [] 方括号来访问列表的元素。但是,我们不能使用此方法...
5 分钟阅读
简介 在繁忙的技术世界中,截屏已成为大多数应用程序和项目的重要组成部分。功能多样的 Python 编程语言提供了各种强大的工具和库来管理许多不同类型的任务,包括截屏。在这篇详细的….
阅读 4 分钟
模式问题在编程中非常普遍。这些问题有助于熟悉程序的流程,还有助于理解如何编写程序以获得期望的输出。模式是使用循环打印的。我们通常使用嵌套循环来打印...
阅读 22 分钟
在这个问题中,我们得到两个长度为 N 的数组,其中 N 是我们可用的物品数量。其中一个数组包含单个物品的利润值,第二个数组包含物品的重量。我们还...
阅读 6 分钟
计算机科学领域最基本的数据结构,不相交集,也称为 Union-Find 方法,可以有效地处理将组件分割成不相交集的问题。当处理涉及连接性和等价性关系的问题时,这种方法非常有用……
阅读 6 分钟
引言:在本教程中,我们将学习从 Python 2 迁移到 Python 3 的 5 个简单技巧。许多重要的 Python 项目已承诺完全过渡到 Python 3。我们在数据科学中可以使用 NumPy、Pandas、SciPy 等。TensorFlow、Scikit-Learn、XGBoost 等用于...
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India