基于Django 的MVC框架设计与实现

2023-03-24 06:59杨洪涛
电脑知识与技术 2023年4期

杨洪涛

关键词:软件框架;MVC;MTV;ORM模型

1 引言

Django是用Python语言设计的一款免费的Web开发框架,它几乎包括了Web应用的各领域,能方便快速地搭建高性能的数据库驱动网站。Django采用了通用Web开发模式的高度抽象,为复杂的编程作业提供了快速解决方案,它也是一款全能型框架,内置了许多模块,极大地方便了Web开发者。

百度百科解释,“软件框架(software framework) ,通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。”简而言之,框架就是制定一套规范或者规则,程序员在该规范或者规则下工作,好比使用别人搭好的舞台来做编剧和表演。Django就是Web开发方面优秀的框架,下面笔者就Django 的MVC 架构设计与实现介绍一下。

2 MVC 设计模式

MVC是Web开发领域著名的设计模式,MVC是Model-View-Controller的缩写,其各部分含义如下:

1) Model:表示数据存取层,处理与数据相关的所有事务,包括对数据表的定義和数据的增删改查等。

2) View:表示视图层,是系统前端显示部分,负责显示什么和如何显示,用于向用户展示结果。

3) Controller:表示控制层,主要根据从View层输入的指令来检索Model层的数据,并在该层编写代码产生结果并输出,用于处理请求、获取数据和返回结果[1]。

MVC设计模式的请求与响应过程如图1所示,运行过程如下:

1) 用户通过浏览器向服务器发起Request请求,Controller层接受请求后,同时向Model层和View 发送指令;

2) Model层根据指令与数据库交互并选择相应业务数据,然后将数据发送给Controller层;

3) View层接收到Controller的指令后,加载用户请求的页面,并将此页面发送给Controller层;

4) Controller层接收到Model和View层的数据后,将它们组织成Response响应格式发送给浏览器,浏览器通过解析把页面展示出来。

MVC的三层之间紧密相连,但又相互独立,每层的修改都不会影响其他层,每层都提供了各自独立的接口供其他层调用,MVC 的设计模式降低了代码之间的耦合性,增加了模块的可重用性,这正是MVC设计模式的优点所在。

3 MVC 的优化设计模式——MTV

Django是基于MVC构造的框架,但在MVC基础上,对控制器Controller进行了封装,增加了模块功能Template 实现前端网页,所以Django 更关注的是模型、模板和视图,称为MTV设计模式。其各部分职责如下:

1) Model:即数据存取层,与MVC中的M功能相同,负责和数据库交互,处理所有数据相关的业务,并提供数据的增删改查。

2) Template:即模板层,也叫表现层,与MVC中的V功能相同,负责封装构造要返回的HTML,处理页面的显示。

3) View:即业务逻辑层,与MVC中的C功能相同,接收请求、进行业务处理和返回应答,是连通Model层和Template的桥梁。

对照两种模式发现,MTV模式中,用View层取代了Controller层的位置,用Template层取代了原来View层的位置,模板可以理解成它是一个HTML 页面,HTML页面的渲染在视图层完成。具体来说,MTV设计模式的原理如图2所示,详细运行过程如下:

1) 用户通过浏览器对服务器发起Request请求,服务器接收请求后,通过View的业务逻辑层进行分析,同时向Model层和Template层发送指令;

2) Model 层与数据库进行交互,将数据返回给View层;

3) Template层接收到指令后,调用相应的模板,并返回给View层;

4) View层接收到模板与数据后,首先对模板进行渲染(即将相应的数据赋值给模板),然后组织成相应格式返回给浏览器,浏览器进行解析后并最终呈现给用户。

通过以上两种设计模式的比较,可以得出MTV是MVC的一种细化,它将原来MVC中的V层拿出来进行分离,视图的显示与如何显示交给Template层,而View层更专注于实现业务逻辑。当然,Django 是有Controller层的,只不过它由框架本身来实现,所以不用关心它,更关注于M、T 和V。

4 项目案例

某中等职业学校需要开发一款B/S版的学生管理信息系统,主要功能和要求为:可新增学生信息、查询学生信息、修改学生信息、删除学生信息和浏览学生信息等。

4.1 需求分析

根据学生管理信息系统功能要求,可以划分如下几个模块来实现,具体为:新增学生信息模块、查询学生信息模块、修改学生信息模块、删除学生信息模块和浏览学生信息模块。由于Django是典范的MVC框架,能灵活地支持数据库,而且有强大的后台管理功能,所以以“浏览学生信息模块”为例(其他模块与之相似),讨论Django MTV模式开发的一般步骤[2]。

4.2 项目结构与规划

首先,列出本项目的目录结构,如图3 所示。

Stu_Manage是项目的主目录,其内部的manage.py文件是项目的运行入口,指定配置文件路径。下一级Stu_Manage文件夹内部的settings.py是整个项目的配置文件,是项目定制化配置。urls.py是主路由文件,通过URL控制器来处理不同的请求。wsgi.py是py?thon服务器程序连接到web服务器的通用协议文件,用来调用App的应用。stu_reginfo是项目内的一个应用,一般每个独立的应用对应一个文件夹,目的是让分类清晰,便于项目分工。

stu_reginfo目录是MTV框架的核心部分,其中ad?min.py 文件是django 自带的一个admin 管理模块,models.py是數据模型文件,views.py是处理用户请求和生成响应的视图文件。

templates文件夹是保存应用程序的模板文件,一般包括html前端页面内容。

到此,基于学生信息系统的MTV 框架目录结构就清楚了,各文件部分的功能及作用也就明白了,以后开发人员依照此MTV框架,只需要根据自身的需求对框架中的各个目录功能进行完善就可进行高效开发,设计出满足自己需求的各类网站。

4.3 系统设计

由前面分析,得出MVC或MTV框架的大体设计流程是:1) 客户端发起请求,路由对客户发起的请求进行统一处理和分发给控制层;2) 控制层获取请求,访问数据层;3) 数据层对数据进行增删改查,把数据返回给控制层;4) 控制层获取数据,把数据调度给视图(模板);5) 视图(模板)对数据进行渲染,形成html文件返回给控制层;6) 控制层把渲染后的视图(模板)返回给客户端。下面以此流程为参考,完成“浏览学生信息模块”的设计。

简单说,ORM的主要功能为:根据对象的类型生成表结构;将对象、列表的操作,转换为SQL语句;将SQL查询到的结果转换为对象、列表。

Django中的模型包含存储数据的字段和约束,对应数据库中唯一的表。在stu_reginfo应用中添加数据模型,执行数据库迁移,即完成Model(模型)设计。

“ 浏览学生信息模块”的数据模型文件是stu_reginfo文件夹中的models.py,根据需求其基本字段定义如下:

python代码分离,模板定义了占位符及各种规范文档该如何显示的模板标签。采用模板输出时,需在项目下建立templates文件夹,再在其中建立html文件,在代码中通过{{ }}输出后台需返回的内容。

本项目中浏览器端输出学生信息浏览效果,通过模板文件stu_reginfo_list.html实现,主要代码如下:

粗体代码要理解透彻,其中{{ }}代表模板变量,表示视图传递给模板的数据;{% %}表示模板标签,实现语句控制功能。这一步就实现了动态生成HTML页面功能,完成Template(模板)设计,这和前面修改setting.py配置文件就一致了。

Django中路由系统的作用是使视图中处理数据的函数与请求的URL建立映射关系,请求时可根据urls.py中的条目找到请求对应的处理方法。根据前面设计,将路由规则stu_reginfo_list与视图函数进行映射,修改项目的主路由文件urls.py内容如下:

4.4 项目测试

通过以上步骤,完成了M、T 和V的设计,现在可以启动项目进行测试了,在命令行执行python man?age.py runserver命令启动项目,若显示如图4提示,表示项目启动正常,没有错误。然后在浏览器中打开http://127.0.0.1:8000/stu_reginfo_list/,即可看到图5结果,表明“浏览学生信息模块”设计成功。

通过上面“浏览学生信息模块”的设计也发现,MTV这种设计模式关键优势在于各种组件之间的松耦合性,每个由Django驱动的Web应用都有独立的目标,并且可单独更改而不影响其他的部分。如开发者更改一个应用程序中的URL而不会影响到这个程序底层的实现,或者设计者改变HTML页面的样式而不用接触Python代码等特点[3]。

5 结论

本文以流行的MVC框架模式为指导,以学生管理信息系统中“浏览学生信息模块”功能的实现为案例,分析说明了MVC框架开发的工作原理和思路,总结了Django MTV模式开发Web网站的基本流程和步骤,希望能对进一步深入理解并运用Django解决实际问题提供参考和帮助。