浅析Web开发工具Django的MVC架构
2021-11-25孙建军,李琪,吕强
孙建军,李琪,吕强
【摘要】 本文深入浅出地分析了网站制作工具Django的MVC架构思想,并结合示例进行了说明,对进一步深入理解并运用dango解决实际问题提供了借鉴和帮助。
【关键词】 Django;MVC;架构
【DOI编码】 10.3969/j.issn.1674-4977.2021.06.039
Analysis on the MVC Architecture of Web Development Tool Django
SUN Jian-jun,LI Qi,LV Qiang
(Shaanxi Institute of Standardization,Xi-an 710000,China)
Abstract: This article analyzes the MVC architecture ideas of Django,a website production tool,in a simple and simple way,and explains it with examples,which provides reference and help for further understanding and using dango to solve practical problems.
Key words: Django;MVC;architecture
Django是一个基于Python语言的WEB开发工具,2005年作为一个开源项目发布。目前,世界上许多的公司和组织已经将Django应用在自己开发的项目中。
Django运行在服务器端主要用于Web网站的制作。其开发框架由数据、呈现、控制三部分构成,被称为MVC架构。这种架构的优点在于,可在其数据、呈现、控制部分分别进行独立开发、维护,使得系统的灵活性、协调性显著增强。
1 MVC架构
MVC是Model-View-Controller的缩写,Model表示模型,View称为呈现方式,Controller是控制器。三者共同构成了一个既彼此独立又相互协同的有机整体,这就是通常所说的MVC架构。在MVC架构下,操作是在View上进行,其响应就会被传送给Controller,而Controller根据业务逻辑去操作Model的数据,而最终数据的变化会反映到View。
图1 Django的MVC架构图
图1中通过模型M,Django可以对数据库进行操作,需要在模型中按照Django的方式定义能够反映数据库中表结构的类来完成,类属性对应于数据库中表的字段。便于实现类与表的关联。Django开发的通用且简单的数据库接口,可以方便地配置并连接诸如Mysql、Oracle等多种数据库系统。Django提供了数据查询、修改、删除等一系列常用功能,实现对数据库的操作。
控制逻辑C是Python系列函数。是Django的处理和控制核心。浏览器上显示的动态页面,需要在后台也即服务器端通过大量的控制和数据处理工作来完成,基于Python语言的Django,具有实现复杂逻辑控制和强大的数据处理能力。
在看呈现方式V,浏览器上能够解释的是标准的Html静态文本文件,但能够体现动态特征的Html文件,需要在服务器端进行处理。Django以Html(不限于)为基础并进行了扩充,增加了变量替换和逻辑控制等功能,实现了页面的动態化,页面最终由Django渲染后,形成标准的Html文本,交由浏览器解释,实现了动态页面的显示。
整个框架工作流程是,从客户端的浏览器上发出页面请求,服务器端接收到请求,交由控制器C,C使用在M中定义并获取的数据进行处理,利用V中定义的模板文件(以Html为基础的文本文件),生成标准的Html文件后,传送至客户端的浏览器上进行显示。
Django在服务器端构建了3个重要模块,它们均为Python模块,这些模块分别对应了架构中的MVC。Models.py模块用一个Python类来描述数据表,并实现与数据库系统的连接,对应于MVC中的M;Views.py模块包含了页面的业务和控制逻辑,在Django中又称为视图,对应于MVC中的C;Template模板系统,包含了基于HTML格式的文本文件,经渲染后,在客户端浏览器上显示页面,对应于MVC中的V。
2 示例
1)配置数据库
Django可以配置并连接多种数据库系统,数据库名在配置数据库系统时指定。以下在M(模型)中定义一个公司类,类名为company。
From django db import models
Class company(models.Model):
Name=models.CharField(max_length=30)
address=models.CharField(max_length=50)
city=models.CharField(max_length=60)
province=models.CharField(max_length=30)
从django.db中导出模型models,使用models中字符串类型定义类的各属性。在与配置的数据库同步后,Django将定义的类转化为一个数据库下的表。以下用类的objects.create方法为表创建一条记录,并保存至数据库中。
p=company.objects.create(name='某公司',address='某街某号',city='某市',province='某省或自治区')
2)定义模板文件
在V(模板)中定义一个文件,称为模板文件,取名ep.html。
公司名称:{{name}}
公司地址:{{address}}
所在城市:{{city}}
所在省或自治区:{{province}}
{{ }}是Django的占位符,占位符内是变量名,变量经赋值后,替代占位符。
3)编制控制流程
定义一个Python函数:取名example.作为C(控制器)中的方法。
from django.template.loader import get_template
from django.template import Context
from django.http import HttpResponse
Def example(request):
t=get_temlate(ep)
c=context({'name':p.name,'address':p.address,'city':p.city,'province':p.province})
html=t.render(c)
return httpResponse(html)
其中,get_temlate()是Django的函数,从django.template.loader程序包中导出,作用是将模板文件转化为模板对象。
t=get_temlate(ep)
将已定义的ep模板文件作为参数传入,生成模板对象t。Context()函数从django.template程序包导出,生成上下文对象。
c=context({'name':p.name,'address':p.address,'city':p.city,'province':p.province})
定义一个python字典,为变量赋值,并将字典作为context()函数的参数,生成上下文对象c。
html=t.render(c)
調用模板对象t的方法render(),以上下文对象作为参数,对模板文件ep进行渲染,实际上是用字典中定义的各项去替换文档中的占位符并给变量赋值。渲染后的文件为标准的Html文件。
公司名称:某公司
公司地址:某街某号
所在城市:某市
所在省或自治区:某省或自治区}
最后将该文本用httpResponse()返回给浏览器,将会在页面上看到以下信息:
公司名称:某公司;公司地址:某街某号;所在城市:某市;所在省或自治区:某省或自治区。
3 结语
MVC是当今Web领域网站制作类工具最为流行和广泛使用的开发架构。以上示例较为具体地说明在架构下的开发和工作过程,这对进一步深入理解并运用django解决实际问题提供了借鉴和帮助。
【作者简介】,
孙建军,男,高级工程师,研究方向为信息化应用。
李琪,男,工程师,硕士,研究方向为网络与信息安全。
吕强,男,高级工程师,硕士,研究方向为统一社会信用代码及电子政务信息化。