深入浅析Django MTV模式


Posted in Python onSeptember 04, 2021

MVC模式

MVC, 全名Model View Controller, 是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model), 视图(View)和控制器(Controller), 具有耦合性低,重用性高、生命周期成本低等优点。

深入浅析Django MTV模式

MVT模式

模型:数据存储层,处理与数据相关的所有事务,例如如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。负责业务对象与数据库的对象(orm)。
模板:表现层,处理与表现相关的决定,例如如何在页面或其他类型的文档中进行显示。
Django作为Web框架,需要一种很便利的方法动态的生成HTML网页,因此有了模板这个概念。模板包含所需HTML的部分代码以及一些特殊的语法,特殊语法用于描述如何将视图传递的数据动态插入HTML网页中。
Django可以配置一个或多个模板引擎(甚至是0个,如前后端分离,Django只提供API接口,无需使用模板引擎),模板引擎有Django模板语言(DTL)和Jinja2。Django模板语言是Django内置的功能之一,Jinja2是当前Python流行的模板语言。
视图:业务逻辑层,存取模型及调取恰当模板的相关逻辑,模型与模板的桥梁。主要负责处理用户请求和生成相应的相应内容,然后在页面或其他类型文档中显示。也可以理解为视图是MVC架构里面的C部分(控制器),主要处理功能和业务上的逻辑。我们习惯使用视图函数处理HTTP请求,记载视图里定义def函数,这种方式成为FBV(Function Base Views)。

深入浅析Django MTV模式

(引自:https://zhuanlan.zhihu.com/p/362268440

Django框架的基础就是MTV模式, 将开发任务分为三大部分:

  • Model:负责业务对象和数据库的关系映射(ORM),与MVC模式中的Model是等同。
  • Template:负责如何把页面展示给用户(HTML),这部分类似与MVC中的视图。
  • View:负责业务逻辑,并在适当时候调用Model和Template。跟MVC中的Controller等同。

深入浅析Django MTV模式

首先,我们要知道:MVT是什么?
昨天也提到了:
M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理。
V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返回应答。
T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html。

MVT是一个前沿的软件架构模式,它具有高效的ORM(Object Relation Mapping)数据操作,将程序中的对象【object】和数据库中的表【relation】建立关联关系,关系【mapping】的过程称为ORM.

为什么使用MVT结构?

1.实现高内聚低耦合易于开发
在实际开发过程中,需要根据不同的需求对原版本进行迭代,MVT把对数据库操作,请求处理和页面布局进行了分离,方便了对代码的更新,不需要牵一发而动全身,易于代码的维护。
2.提高开发效率
做到了前后端的分离,易于代码的整合.方便使用者分工合作。也提高了重用性,对于相似部分方便复用,提高了开发效率。
那么,你是不是还记住了那句话“Django框架遵循MVC设计”?MVC是个什么玩意儿?
M表示Model,主要用于对数据库层的封装;
V表示View,用于向用户展示结果;
C表示Controller,是核心,用于处理请求、获取数据、返回结果。

关于MVC,有3点需要注意:

1.大部分开发语言中都有MVC框架;
2.MVC框架的核心思想是:解耦;
3.能降低各功能模块之间耦合性,方便变更,更容易重构代码,最大程度实现代码重用。

最后,Django架构模式:
MVT架构模式:在MVC基础上,对控制器controller进行了封装,增加了模块功能【Templates】实现前端网页【Html】
MVC架构模式:数据model?>视图views?>数据交互?>服务器?>控制器controller?>相应函数的调用。

到此这篇关于Django MTV模式的文章就介绍到这了,更多相关Django MTV模式内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python模块搜索概念介绍及模块安装方法介绍
Jun 03 Python
R语言 vs Python对比:数据分析哪家强?
Nov 17 Python
用Python中的turtle模块画图两只小羊方法
Apr 09 Python
Python函数的默认参数设计示例详解
Dec 01 Python
Pytoch之torchvision.transforms图像变换实例
Dec 30 Python
Python面向对象之私有属性和私有方法应用案例分析
Dec 31 Python
Python3标准库之dbm UNIX键-值数据库问题
Mar 24 Python
Python如何把字典写入到CSV文件的方法示例
Aug 23 Python
termux中matplotlib无法显示中文问题的解决方法
Jan 11 Python
python控制台打印log输出重复的解决方法
May 14 Python
解决pytorch-gpu 安装失败的记录
May 24 Python
Python 数据可视化之Bokeh详解
Nov 02 Python
python 进阶学习之python装饰器小结
Sep 04 #Python
自动在Windows中运行Python脚本并定时触发功能实现
Sep 04 #Python
关于python爬虫应用urllib库作用分析
解决pycharm下载库时出现Failed to install package的问题
关于python类SortedList详解
Sep 04 #Python
Python3.8官网文档之类的基础语法阅读
Sep 04 #Python
python实现Nao机器人的单目测距
Sep 04 #Python
You might like
PHP--用万网的接口实现域名查询功能
2012/12/13 PHP
php 利用array_slice函数获取随机数组或前几条数据
2015/09/30 PHP
PHP获取当前文件的父目录方法汇总
2016/07/21 PHP
Jquery截取中文字符串的实现代码
2010/12/22 Javascript
多选列表框动态添加,移动,删除,全选等操作的简单实例
2014/01/13 Javascript
jquery通过closest选择器修改上级元素的方法
2015/03/17 Javascript
JavaScript 表单处理实现代码
2015/04/13 Javascript
jQuery遍历页面所有CheckBox查看是否被选中的方法
2015/04/14 Javascript
js实现的Easy Tabs选项卡用法实例
2015/09/06 Javascript
JavaScript判断表单为空及获取焦点的方法
2016/02/12 Javascript
js实现自动轮换选项卡
2017/01/13 Javascript
Ionic + Angular.js实现验证码倒计时功能的方法
2017/06/12 Javascript
微信小程序返回多级页面的实现方法
2017/10/27 Javascript
基于vue1和vue2获取dom元素的方法
2018/03/17 Javascript
Angular resolve基础用法详解
2018/10/03 Javascript
详解React中合并单元格的正确写法
2019/01/08 Javascript
基于javascript处理nginx请求过程详解
2020/07/07 Javascript
跟老齐学Python之深入变量和引用对象
2014/09/24 Python
解决Python出现_warn_unsafe_extraction问题的方法
2016/03/24 Python
python搭建虚拟环境的步骤详解
2016/09/27 Python
python os.fork() 循环输出方法
2019/08/08 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
2020/06/10 Python
Python实现GIF图倒放
2020/07/16 Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
2020/11/02 Python
Python实现PS滤镜中的USM锐化效果
2020/12/04 Python
使用CSS变量实现炫酷惊人的悬浮效果
2019/04/26 HTML / CSS
美国老牌主机服务商:iPage
2016/07/22 全球购物
什么是Smart Navigation?
2016/07/03 面试题
中层干部竞聘演讲稿
2014/05/15 职场文书
旅游文化节策划方案
2014/06/06 职场文书
2014年员工工作总结范文
2014/11/18 职场文书
通知函格式范文
2015/04/27 职场文书
德能勤绩工作总结
2015/08/11 职场文书
大学生奖学金获奖感言(范文)
2019/08/15 职场文书
python 对图片进行简单的处理
2021/06/23 Python
Redis 常见使用场景
2021/08/30 Redis