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分割TXT文件成4K的TXT文件
May 23 Python
flask中使用SQLAlchemy进行辅助开发的代码
Feb 10 Python
全面解读Python Web开发框架Django
Jun 30 Python
python和shell实现的校验IP地址合法性脚本分享
Oct 23 Python
Python实现k-means算法
Feb 23 Python
Python实现获取本地及远程图片大小的方法示例
Jul 21 Python
python协程之动态添加任务的方法
Feb 19 Python
python里运用私有属性和方法总结
Jul 08 Python
python中的数组赋值与拷贝的区别详解
Nov 26 Python
Python3的unicode编码转换成中文的问题及解决方案
Dec 10 Python
使用keras内置的模型进行图片预测实例
Jun 17 Python
python空元组在all中返回结果详解
Dec 15 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
discuz加密解密函数使用方法和中文注释
2014/01/21 PHP
Codeigniter整合Tank Auth权限类库详解
2014/06/12 PHP
PHP实现采集抓取淘宝网单个商品信息
2015/01/08 PHP
PHP内置函数生成随机数实例
2019/01/18 PHP
基于jquery的simpleValidate简易验证插件
2014/01/31 Javascript
关于Javascript加载执行优化的研究报告
2014/12/16 Javascript
原生javascript实现图片弹窗交互效果
2015/01/12 Javascript
JavaScript中的包装对象介绍
2015/01/27 Javascript
js使用Array.prototype.sort()对数组对象排序的方法
2015/01/28 Javascript
JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
2015/11/24 Javascript
瀑布流的实现方式(原生js+jquery+css3)
2020/06/28 Javascript
jQuery实现两个select控件的互移操作
2016/12/22 Javascript
使用JS中的Replace()方法遇到的问题小结
2017/10/20 Javascript
JavaScript对象的特性与实践应用深入详解
2018/12/30 Javascript
jquery实现简单每周轮换的日历
2020/09/10 jQuery
[10:04]国际邀请赛采访专栏:DK.Farseer,mouz.Black^,采访员Josh专访
2013/08/05 DOTA
[04:10]DOTA2英雄梦之声_第11期_圣堂刺客
2014/06/21 DOTA
[52:29]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第三局
2016/03/03 DOTA
[40:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs TNC
2018/04/01 DOTA
使用python BeautifulSoup库抓取58手机维修信息
2013/11/21 Python
用Python3创建httpServer的简单方法
2018/06/04 Python
Python3中详解fabfile的编写
2018/06/24 Python
使用Python进行目录的对比方法
2018/11/01 Python
python 产生token及token验证的方法
2018/12/26 Python
pyqt5中QThread在使用时出现重复emit的实例
2019/06/21 Python
Python3打包exe代码2种方法实例解析
2020/02/17 Python
python 中不同包 类 方法 之间的调用详解
2020/03/09 Python
Python实现钉钉/企业微信自动打卡的示例代码
2021/02/02 Python
html5 跨文档消息传输示例探讨
2013/04/01 HTML / CSS
linux面试题参考答案(6)
2016/06/23 面试题
几个常见的消息中间件(MOM)
2014/01/08 面试题
2014年银行柜员工作总结
2014/11/12 职场文书
个人自荐书范文
2015/03/09 职场文书
新娘父亲婚礼致辞
2015/07/27 职场文书
公司转让协议书
2016/03/19 职场文书
Go并发4种方法简明讲解
2022/04/06 Golang