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中比较特别的除法运算和幂运算介绍
Apr 05 Python
浅谈pyhton学习中出现的各种问题(新手必看)
May 17 Python
python编程通过蒙特卡洛法计算定积分详解
Dec 13 Python
python 删除指定时间间隔之前的文件实例
Apr 24 Python
python合并已经存在的sheet数据到新sheet的方法
Dec 11 Python
Pandas之Dropna滤除缺失数据的实现方法
Jun 25 Python
python银行系统实现源码
Oct 25 Python
详谈tensorflow gfile文件的用法
Feb 05 Python
Tkinter中复选菜单是否被选中的判断与设置方式
Mar 04 Python
Python ATM功能实现代码实例
Mar 19 Python
使用tensorflow框架在Colab上跑通猫狗识别代码
Apr 26 Python
浅谈Python基础之列表那些事儿
May 11 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
PHP 远程关机实现代码
2009/11/10 PHP
PHP管理依赖(dependency)关系工具 Composer的自动加载(autoload)
2014/08/18 PHP
护卫神php套件 php版本升级方法(php5.5.24)
2015/05/10 PHP
php验证邮箱和ip地址最简单方法汇总
2015/10/30 PHP
getElementById在任意一款浏览器中都可以用吗的疑问回复
2007/05/13 Javascript
Json对象替换字符串占位符实现代码
2010/11/17 Javascript
jquery EasyUI的formatter格式化函数代码
2011/01/12 Javascript
JQuery EasyUI 日期控件如何控制日期选择区间
2014/05/05 Javascript
jquery让返回的内容显示在特定div里(代码少而精悍)
2014/06/23 Javascript
javascript实现的元素拖动函数宿主为浏览器
2014/07/21 Javascript
js文本框走动跑马灯效果代码分享
2015/08/25 Javascript
AngularJS 路由详解和简单实例
2016/07/28 Javascript
js 模仿锚点定位的实现方法
2016/11/19 Javascript
原生JS实现几个常用DOM操作API实例
2017/01/19 Javascript
js省市区级联查询(插件版&无插件版)
2017/03/21 Javascript
JS实现线性表的链式表示方法示例【经典数据结构】
2017/04/11 Javascript
jQuery进阶实践之利用最优雅的方式如何写ajax请求
2017/12/20 jQuery
vue.js 实现图片本地预览 裁剪 压缩 上传功能
2018/03/01 Javascript
JS实现集合的交集、补集、差集、去重运算示例【ES5与ES6写法】
2019/02/18 Javascript
vue踩坑记录之数组定义和赋值问题
2019/03/20 Javascript
jQuery事件blur()方法的使用实例讲解
2019/03/30 jQuery
vue element实现表格合并行数据
2020/11/30 Vue.js
pymongo为mongodb数据库添加索引的方法
2015/05/11 Python
Python中的日期时间处理详解
2016/11/17 Python
Python 实现数据结构-循环队列的操作方法
2019/07/17 Python
离线状态下在jupyter notebook中使用plotly实例
2020/04/24 Python
python如何快速拼接字符串
2020/10/28 Python
CSS3 文字动画效果
2020/11/12 HTML / CSS
html5 跨文档消息传输示例探讨
2013/04/01 HTML / CSS
使用PDF.JS插件在HTML中预览PDF文件的方法
2018/08/29 HTML / CSS
英国健康和美容技术产品购物网站:CurrentBody
2019/07/17 全球购物
Tommy Hilfiger澳洲官网:美国高端休闲领导品牌
2020/12/16 全球购物
毕业生求职的求职信
2013/12/05 职场文书
解除合同协议书
2014/04/17 职场文书
计划生育证明书写要求
2014/09/17 职场文书
护士长2014年终工作总结
2014/11/11 职场文书