Python设计模式之MVC模式简单示例


Posted in Python onJanuary 10, 2018

本文实例讲述了Python设计模式之MVC模式。分享给大家供大家参考,具体如下:

一.简单介绍

mvc模式  the  model-view-controller pattern

mvc模式是一个运用在软件工程中的设计模式。mvc模式脱离了以前简单的web服务设计逻辑,将开发,测试和维护分离。在MVC模式中,应用被分解为相互作用的模块,模型,视图,控制。目的在于分离输入(control),处理逻辑(model),输出格式(view)。

简单的理解:

1. 控制模块用于获取用户输入,并将模型与视图建立联系
2. 模型主要是从存储区获取数据
3. 视图用于展示给用户,从模型获取的数据

Python设计模式之MVC模式简单示例

具体细节:

控制模块:可以被看作是一个介于用户,处理(model),显示(view)之间的中间人。它是用户请求的入口,也是应用处理的入口。控制模块接受用户输入,解析,决定哪一个model和view参与处理,因此,它决定了针对用户请求,选择何种view和model。

模型模块:处理业务的应用程序,model操作数据库,比如插入,更新,删除。每个模型会提供固定类型的数据给控制模块,另一方面,控制模块可以调用模型的不同方法处理数据,并将处理后的结果返回给视图模型

视图模块:主要用来显示,通过控制模块获取模型模块处理后的数据,并进行格式化的显示。通过控制模块选择view并显示反馈给用户。view模型的选择是基于模型模块的l选择和用户配置等等。

二.简单的例子

测试管理系统用来查询错误列表

情景描述:

如果用户查询一个特定的错误,测试管理系统以某种格式显示这个错误的描述
如果用户搜索相关错误的关键值,测试管理系统显示所有相关的错误列表

创建SQLite 数据库,库名TMS,并创建一个表

ID Component Summary
1 XYZ File doesn't get deleted
2 XYZ Registry doesn't get created
3 ABC Wrong title gets displayed

代码如下:

#mvc.py
import sqlite4
import types
class DefectModel:
  def getDefectList(self, component):
    query = "select ID from defects where Component= '%s' " % component
    defectlist = self._dbselect(query)
    list = []
    for row in defectlist:
      list.append(row[0])
    return list
  def getSummary(self, id):
    query = "select summary from defects where ID='%d'" % id
    summary = self._dbselect(query)
    for row in summary:
      return row[0]
  def _dbselect(self, query):
    connection = sqlite3.connect('TMS')
    cursorObj = connection.cursor()
    results = cursorObj.execute(query)
    connection.commit()
    cursorObj.close()
    return results
class DefectView:
  def summary(self, summary, defectid):
    print "#### Defect Summary for defect# %d####%s\n" %(defectid, summary)
  def defectList(self, list, category):
    print "#### Defect List for %s ####\n" % category
    for defect in list:
      print defect
class Controller:
  def __init__(self):
    pass
  def getDefectSummary(self, defectid):
    model = DefectModel()
    view = DefectView()
    summary_data = model.getSummary(defectid)
    return view.summary(summary_data, defectid)
  def getDefectList(self, component):
    model = DefectModel()
    view = DefectView()
    defectlist_data = model.getDefectList(component)
    return view.defectList(defectlist_data, component)

使用模块:

import mvc
controller = mvc.Controller()
print controller.getDefectSummary(2)
print controller.getDefectList('ABC')

总结:通过此mvc设计方法,看到了解耦的好处,个个模块独立,相互不影响,也可以增加模块。方便组合,方便拆卸。好好体会吧!

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python psutil模块简单使用实例
Apr 28 Python
Python中的rfind()方法使用详解
May 19 Python
利用python批量给云主机配置安全组的方法教程
Jun 21 Python
Python爬虫之正则表达式基本用法实例分析
Aug 08 Python
在交互式环境中执行Python程序过程详解
Jul 12 Python
Python 实现加密过的PDF文件转WORD格式
Feb 04 Python
python实现电子词典
Mar 03 Python
python 实现在无序数组中找到中位数方法
Mar 03 Python
解决Django no such table: django_session的问题
Apr 07 Python
matlab 计算灰度图像的一阶矩,二阶矩,三阶矩实例
Apr 22 Python
如何利用python之wxpy模块玩转微信
Aug 17 Python
python exit出错原因整理
Aug 31 Python
Python设计模式之命令模式简单示例
Jan 10 #Python
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
Jan 10 #Python
Python之多线程爬虫抓取网页图片的示例代码
Jan 10 #Python
Python设计模式之观察者模式简单示例
Jan 10 #Python
Python爬虫实例_城市公交网络站点数据的爬取方法
Jan 10 #Python
Python爬虫_城市公交、地铁站点和线路数据采集实例
Jan 10 #Python
Python tornado队列示例-一个并发web爬虫代码分享
Jan 09 #Python
You might like
重置版战役片段
2020/04/09 魔兽争霸
laravel框架创建授权策略实例分析
2019/11/22 PHP
用javascript动态调整iframe高度的代码
2007/04/10 Javascript
将函数的实际参数转换成数组的方法
2010/01/25 Javascript
JQuery EasyUI 日期控件如何控制日期选择区间
2014/05/05 Javascript
JavaScript匿名函数之模仿块级作用域
2015/12/12 Javascript
JavaScript判断用户名和密码不能为空的实现代码
2016/05/16 Javascript
基于jQuery实现淡入淡出效果轮播图
2020/07/31 Javascript
js获取指定字符前/后的字符串简单实例
2016/10/27 Javascript
Canvas实现动态的雪花效果
2017/02/13 Javascript
JavaScript简单计算人的年龄示例
2017/04/15 Javascript
underscore之Chaining_动力节点Java学院整理
2017/07/10 Javascript
js+html5实现复制文字按钮
2017/07/15 Javascript
详解PHP后期静态绑定分析与应用
2018/03/21 Javascript
详解redis在nodejs中的应用
2018/05/02 NodeJs
nodejs取得当前执行路径的方法
2018/05/13 NodeJs
vue微信分享出来的链接点开是首页问题的解决方法
2018/11/28 Javascript
vue实现设置载入动画和初始化页面动画效果
2019/10/28 Javascript
用vue 实现手机触屏滑动功能
2020/05/28 Javascript
JS canvas实现画板和签字板功能
2021/02/23 Javascript
[43:03]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python下MySQLdb用法实例分析
2015/06/08 Python
K-means聚类算法介绍与利用python实现的代码示例
2017/11/13 Python
python3通过selenium爬虫获取到dj商品的实例代码
2019/04/25 Python
使用Python和Prometheus跟踪天气的使用方法
2019/05/06 Python
python如何读取bin文件并下发串口
2019/07/05 Python
Windows下实现将Pascal VOC转化为TFRecords
2020/02/17 Python
Pytorch 使用CNN图像分类的实现
2020/06/16 Python
python如何爬取网页中的文字
2020/07/28 Python
python的flask框架难学吗
2020/07/31 Python
python爬虫使用requests发送post请求示例详解
2020/08/05 Python
机电专业毕业生推荐信
2013/11/10 职场文书
双拥工作宣传标语
2014/06/26 职场文书
2015年高校辅导员工作总结
2015/04/20 职场文书
“5.12”护士节主持词
2015/07/04 职场文书
React forwardRef的使用方法及注意点
2021/06/13 Javascript