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中的zipfile模块使用详解
Jun 25 Python
使用Python来开发Markdown脚本扩展的实例分享
Mar 04 Python
python中子类继承父类的__init__方法实例
Dec 15 Python
python取代netcat过程分析
Feb 10 Python
30秒轻松实现TensorFlow物体检测
Mar 14 Python
python 读文件,然后转化为矩阵的实例
Apr 23 Python
Python检测网络延迟的代码
May 15 Python
python实现微信每日一句自动发送给喜欢的人
Apr 29 Python
Tensorflow Summary用法学习笔记
Jan 10 Python
python 使用递归实现打印一个数字的每一位示例
Feb 27 Python
python 机器学习的标准化、归一化、正则化、离散化和白化
Apr 16 Python
python 中的jieba分词库
Nov 23 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
轻轻松松学习JavaScript
2007/02/25 Javascript
JavaScript 脚本将当地时间转换成其它时区
2009/03/19 Javascript
jquery向.ashx文件post中文乱码问题的解决方法
2011/03/28 Javascript
页面只能打开一次Cooike如何实现
2012/12/04 Javascript
在页面中js获取光标/鼠标的坐标及光标的像素坐标
2013/11/11 Javascript
使用JavaScript 实现的人脸检测
2015/03/24 Javascript
使用javascript实现判断当前浏览器
2015/04/14 Javascript
jQuery实现仿路边灯箱广告图片轮播效果
2015/04/15 Javascript
基于javascript代码实现通过点击图片显示原图片
2015/11/29 Javascript
Bootstrap入门书籍之(三)栅格系统
2016/02/17 Javascript
JQuery的常用选择器、过滤器、方法全面介绍
2016/05/25 Javascript
漫谈JS引擎的运行机制 你应该知道什么
2016/06/15 Javascript
Angular之toDoList的实现代码示例
2017/12/02 Javascript
使用Vue自定义指令实现Select组件
2018/05/24 Javascript
vue定义全局变量和全局方法的方法示例
2018/08/01 Javascript
Element-ui之ElScrollBar组件滚动条的使用方法
2018/09/14 Javascript
详解vue父子组件关于模态框状态的绑定方案
2019/06/05 Javascript
Python实现周期性抓取网页内容的方法
2015/11/04 Python
深入理解Django的自定义过滤器
2017/10/17 Python
Python闭包之返回函数的函数用法示例
2018/01/27 Python
Python实现的HMacMD5加密算法示例
2018/04/03 Python
Python魔法方法功能与用法简介
2019/04/04 Python
Tensorflow实现神经网络拟合线性回归
2019/07/19 Python
Jupyter Notebook折叠输出的内容实例
2020/04/22 Python
基于Python词云分析政府工作报告关键词
2020/06/02 Python
使用CSS实现阅读进度条
2017/02/27 HTML / CSS
CSS3点击按钮实现背景渐变动画效果
2016/10/19 HTML / CSS
药物学专业学生的自我评价
2013/10/27 职场文书
会计电算化专业个人的自我评价
2013/11/24 职场文书
《李时珍夜宿古寺》教学反思
2014/04/09 职场文书
读书月活动方案
2014/05/22 职场文书
环保标语大全
2014/06/12 职场文书
办公室务虚会发言材料
2014/10/20 职场文书
学生喝酒检讨书500字
2014/11/02 职场文书
试用期解除劳动合同通知书
2015/04/16 职场文书
浅谈MySQL之浅入深出页原理
2021/06/23 MySQL