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列表推导式的使用方法
Nov 21 Python
实例讲解Python的函数闭包使用中应注意的问题
Jun 20 Python
Python图算法实例分析
Aug 13 Python
Python 正则表达式入门(初级篇)
Dec 07 Python
利用Hyperic调用Python实现进程守护
Jan 02 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
May 04 Python
Python SVM(支持向量机)实现方法完整示例
Jun 19 Python
谈谈Python中的while循环语句
Mar 10 Python
python 字符串常用函数详解
Sep 11 Python
pytorch1.0中torch.nn.Conv2d用法详解
Jan 10 Python
基于python实现简单C/S模式代码实例
Sep 14 Python
Python word文本自动化操作实现方法解析
Nov 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的一个登录的类 [推荐]
2007/03/16 PHP
php 静态页面中显示动态内容
2009/08/14 PHP
php中根据变量的类型 选择echo或dump
2012/07/05 PHP
PHP strstr 函数判断字符串是否否存在的实例代码
2013/09/28 PHP
php动态生成缩略图并输出显示的方法
2015/04/20 PHP
PHP 读取大文件并显示的简单实例(推荐)
2016/08/12 PHP
浅析jQuery对select操作小结(遍历option,操作option)
2013/07/04 Javascript
jquery禁止输入数字以外的字符的示例(纯数字验证码)
2014/04/10 Javascript
jquery数组过滤筛选方法grep()简介
2014/06/06 Javascript
javascript学习笔记(七)Ajax和Http状态码
2014/10/08 Javascript
nodejs中使用多线程编程的方法实例
2015/03/24 NodeJs
jquery插件之文字间歇自动向上滚动效果代码
2016/02/25 Javascript
浅述Javascript的外部对象
2016/12/07 Javascript
javascript实现右下角广告框效果
2017/02/01 Javascript
基于vue实现分页/翻页组件paginator示例
2017/03/09 Javascript
React + webpack 环境配置的方法步骤
2017/09/07 Javascript
vue封装第三方插件并发布到npm的方法
2017/09/25 Javascript
原生JS实现 MUI导航栏透明渐变效果
2017/11/07 Javascript
JS实现的计数排序与基数排序算法示例
2017/12/04 Javascript
webpack源码之loader机制详解
2018/04/06 Javascript
vue.js单文件组件中非父子组件的传值实例
2018/09/13 Javascript
js实现京东秒杀倒计时功能
2019/01/21 Javascript
Vue中使用better-scroll实现轮播图组件
2020/03/07 Javascript
Python爬虫DNS解析缓存方法实例分析
2017/06/02 Python
利用Python暴力破解zip文件口令的方法详解
2017/12/21 Python
Python生成短uuid的方法实例详解
2018/05/29 Python
Python Logging 日志记录入门学习
2018/06/02 Python
Python实现调用另一个路径下py文件中的函数方法总结
2018/06/07 Python
对python读写文件去重、RE、set的使用详解
2018/12/11 Python
用django设置session过期时间的方法解析
2019/08/05 Python
增大python字体的方法步骤
2020/07/05 Python
Python ConfigParser模块的使用示例
2020/10/12 Python
团队精神口号
2014/06/06 职场文书
2014年学校党建工作汇报材料
2014/11/02 职场文书
教师师德承诺书2016
2016/03/25 职场文书
SpringCloud Alibaba 基本开发框架搭建过程
2021/06/13 Java/Android