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模块学习 re 正则表达式
May 19 Python
python查找指定具有相同内容文件的方法
Jun 28 Python
Python 实现数据库(SQL)更新脚本的生成方法
Jul 09 Python
Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)
Aug 23 Python
纯python进行矩阵的相乘运算的方法示例
Jul 17 Python
Python3分析处理声音数据的例子
Aug 27 Python
三个python爬虫项目实例代码
Dec 28 Python
python3光学字符识别模块tesserocr与pytesseract的使用详解
Feb 26 Python
Python ORM框架Peewee用法详解
Apr 29 Python
Pycharm生成可执行文件.exe的实现方法
Jun 02 Python
Tensorflow中k.gradients()和tf.stop_gradient()用法说明
Jun 10 Python
彻底解决Python包下载慢问题
Nov 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
常用表单验证类,有了这个,一般的验证就都齐了。
2006/12/06 PHP
php实现在多维数组中查找特定value的方法
2015/07/29 PHP
PHP实现的一致性哈希算法完整实例
2015/11/14 PHP
身份证号码前六位所代表的省,市,区, 以及地区编码下载
2007/04/12 Javascript
jquery中获取元素的几种方式小结
2011/07/05 Javascript
js图片切换具体实现代码
2016/10/13 Javascript
Three.js加载外部模型的教程详解
2017/11/10 Javascript
详解小程序循环require之坑
2019/03/08 Javascript
JS解惑之Object中的key是有序的么
2019/05/06 Javascript
详解vue 组件
2020/06/11 Javascript
[01:39:04]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第二场 2月1日
2021/03/11 DOTA
Python天气预报采集器实现代码(网页爬虫)
2012/10/07 Python
跟老齐学Python之从格式化表达式到方法
2014/09/28 Python
Python Flask-web表单使用详解
2017/11/18 Python
python解决pandas处理缺失值为空字符串的问题
2018/04/08 Python
解读python logging模块的使用方法
2018/04/17 Python
Python tkinter的grid布局及Text动态显示方法
2018/10/11 Python
python如何实现异步调用函数执行
2019/07/08 Python
Python中包的用法及安装
2020/02/11 Python
python烟花效果的代码实例
2020/02/25 Python
Python3自定义json逐层解析器代码
2020/05/11 Python
如何基于Python Matplotlib实现网格动画
2020/07/20 Python
css3发光搜索表单分享
2014/04/11 HTML / CSS
HTML5基于flash实现播放RTMP协议视频的示例代码
2020/12/04 HTML / CSS
Spartoo瑞典:鞋子、包包和衣服
2018/09/15 全球购物
英国工作场所设备购买网站:Slingsby
2019/05/03 全球购物
经典优秀个人求职自荐信格式
2013/09/25 职场文书
高级人员简历的自我评价分享
2013/11/03 职场文书
目标责任书范本
2014/04/16 职场文书
老干部工作先进集体事迹材料
2014/05/21 职场文书
课外活动总结
2015/02/04 职场文书
我们的节日元宵节活动总结
2015/02/06 职场文书
国家助学贷款承诺书
2015/04/30 职场文书
2016年党员干部公开承诺书
2016/03/24 职场文书
Golang 实现超大文件读取的两种方法
2021/04/27 Golang
Java9新特性对HTTP2协议支持与非阻塞HTTP API
2022/03/16 Java/Android