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 02 Python
python 读入多行数据的实例
Apr 19 Python
python smtplib模块自动收发邮件功能(一)
May 22 Python
python中使用iterrows()对dataframe进行遍历的实例
Jun 09 Python
Python使用pickle模块储存对象操作示例
Aug 15 Python
PyQt5 对图片进行缩放的实例
Jun 18 Python
Flask框架模板渲染操作简单示例
Jul 31 Python
python matplotlib库绘制条形图练习题
Aug 10 Python
Python threading.local代码实例及原理解析
Mar 16 Python
如何在python中判断变量的类型
Jul 29 Python
将不规则的Python多维数组拉平到一维的方法实现
Jan 11 Python
详解Django中 render() 函数的使用方法
Apr 22 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 将excel导入mysql
2009/11/09 PHP
用PHP代替JS玩转DOM的思路及示例代码
2014/06/15 PHP
PHP 实现的将图片转换为TXT
2015/10/21 PHP
使用PHPMailer发送邮件实例
2017/02/15 PHP
PHPExcel 修改已存在Excel的方法
2018/05/03 PHP
PHP的介绍以及优势详细分析
2019/09/05 PHP
javascript实现轮显新闻标题链接
2007/08/13 Javascript
javascript 网页跳转的方法
2008/12/24 Javascript
网页开发中的容易忽略的问题 javascript HTML中的table
2009/04/15 Javascript
JavaScript 设计模式学习 Singleton
2009/07/27 Javascript
JavaScript setTimeout和setInterval的使用方法 说明
2010/03/25 Javascript
把jquery 的dialog和ztree结合实现步骤
2013/08/02 Javascript
使用简洁的jQuery方法实现隔行换色功能
2014/01/02 Javascript
不使用jquery实现js打字效果示例分享
2014/01/19 Javascript
dreamweaver 8实现Jquery自动提示
2014/12/04 Javascript
plupload+artdialog实现多平台上传文件
2016/07/19 Javascript
js获取腾讯视频ID的方法
2016/10/03 Javascript
深入浅析Vue组件开发
2016/11/25 Javascript
vue2.0 如何把子组件的数据传给父组件(推荐)
2018/01/15 Javascript
基于js实现抽红包并分配代码实例
2019/09/19 Javascript
vue 取出v-for循环中的index值实例
2019/11/09 Javascript
Python使用numpy模块创建数组操作示例
2018/06/20 Python
使用tensorflow实现线性回归
2018/09/08 Python
Python根据服务获取端口号的方法
2019/09/25 Python
Python collections中的双向队列deque简单介绍详解
2019/11/04 Python
python中Lambda表达式详解
2019/11/20 Python
python selenium 获取接口数据的实现
2020/12/07 Python
Html5 实现微信分享及自定义内容的流程
2019/08/20 HTML / CSS
瑞士香水购物网站:Parfumcity.ch
2017/01/14 全球购物
SmartBuyGlasses荷兰:购买太阳镜和眼镜
2020/03/16 全球购物
物业管理专业个人的自我评价
2013/11/19 职场文书
理财投资建议书
2014/03/12 职场文书
汽车专业求职信
2014/06/05 职场文书
七一党日活动总结
2014/07/08 职场文书
红色旅游心得体会
2014/09/03 职场文书
2015年小学一年级班主任工作总结
2015/05/21 职场文书