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、PyCharm安装及使用方法(Mac版)详解
Apr 28 Python
Python读取文件内容的三种常用方式及效率比较
Oct 07 Python
利用Django内置的认证视图实现用户密码重置功能详解
Nov 24 Python
flask中使用蓝图将路由分开写在不同文件实例解析
Jan 19 Python
python得到windows自启动列表的方法
Oct 14 Python
对python中url参数编码与解码的实例详解
Jul 25 Python
如何为Python终端提供持久性历史记录
Sep 03 Python
PyQt5多线程刷新界面防假死示例
Dec 13 Python
基于pytorch 预训练的词向量用法详解
Jan 06 Python
python不相等的两个字符串的 if 条件判断为True详解
Mar 12 Python
Python如何实现自带HTTP文件传输服务
Jul 08 Python
Python3获取cookie常用三种方案
Oct 05 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中的登陆login
2007/01/18 PHP
PHP 引用是个坏习惯
2010/03/12 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
2016/03/22 PHP
你不知道的文件上传漏洞php代码分析
2016/09/29 PHP
PHP实现导出excel数据的类库用法示例
2016/10/15 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
重载toString实现JS HashMap分析
2011/03/13 Javascript
jquery remove方法应用详解
2012/11/22 Javascript
javascript代码运行不出来执行错误的可能情况整理
2013/10/18 Javascript
IE8下String的Trim()方法失效的解决方法
2013/11/08 Javascript
js获取下拉列表框中的value和text的值示例代码
2014/01/11 Javascript
深入浅出理解javaScript原型链
2015/05/09 Javascript
jquery实现横向图片轮播特效代码分享
2015/11/19 Javascript
jQuery插件datatables使用教程
2016/04/21 Javascript
JavaScript探测CSS动画是否已经完成的方法
2016/08/30 Javascript
Vue scoped及deep使用方法解析
2020/08/01 Javascript
OpenLayer3自定义测量控件MeasureTool
2020/09/28 Javascript
[01:02:47]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
pycharm 使用心得(五)断点调试
2014/06/06 Python
python看某个模块的版本方法
2018/10/16 Python
如何用Python破解wifi密码过程详解
2019/07/12 Python
tensorflow实现tensor中满足某一条件的数值取出组成新的tensor
2020/01/04 Python
纯CSS3实现3D旋转书本效果
2016/03/21 HTML / CSS
院药学专业个人求职信
2013/09/21 职场文书
办公室主任职责范文
2013/11/08 职场文书
物业招聘计划书
2014/01/10 职场文书
七年级生物教学反思
2014/01/30 职场文书
会计专业大学生职业生涯规划书
2014/02/11 职场文书
党员弘扬焦裕禄精神思想汇报
2014/09/10 职场文书
2015会计试用期工作总结
2014/12/12 职场文书
2015年法制宣传月活动总结
2015/03/26 职场文书
小学运动会通讯稿
2015/07/18 职场文书
小学体育跳绳课教学反思
2016/02/16 职场文书
小学生作文之《压岁钱的烦恼》
2019/09/27 职场文书
MySQL触发器的使用
2021/05/24 MySQL
Windows下用Nginx配置https服务器及反向代理的问题
2021/09/25 Servers