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的Twisted框架实现一个简单的服务器
Apr 16 Python
[原创]pip和pygal的安装实例教程
Dec 07 Python
Python3实现将本地JSON大数据文件写入MySQL数据库的方法
Jun 13 Python
Python定义二叉树及4种遍历方法实例详解
Jul 05 Python
Python中使用pypdf2合并、分割、加密pdf文件的代码详解
May 21 Python
Python从list类型、range()序列简单认识类(class)【可迭代】
May 31 Python
elasticsearch python 查询的两种方法
Aug 04 Python
Python中__repr__和__str__区别详解
Nov 07 Python
浅谈Python类中的self到底是干啥的
Nov 11 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
Aug 18 Python
Python更改pip镜像源的方法示例
Dec 01 Python
详解Python openpyxl库的基本应用
Feb 26 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
全国FM电台频率大全 - 24 贵州省
2020/03/11 无线电
PHP数据类型的总结分析
2013/06/13 PHP
PHP类的自动加载与命名空间用法实例分析
2020/06/05 PHP
用函数式编程技术编写优美的 JavaScript
2006/11/25 Javascript
javascript函数重载解决方案分享
2014/02/19 Javascript
原生js事件的添加和删除的封装
2014/07/01 Javascript
jQuery插件pagewalkthrough实现引导页效果
2015/07/05 Javascript
JavaScript实现自动弹出窗口并自动关闭窗口的方法
2015/08/06 Javascript
js实现无限级树形导航列表效果代码
2015/09/23 Javascript
JavaScrip调试技巧之断点调试
2015/10/22 Javascript
使用JQuery实现智能表单验证功能
2016/03/08 Javascript
AngularJS基础 ng-value 指令简单示例
2016/08/03 Javascript
nodejs实现发出蜂鸣声音(系统报警声)的方法
2017/01/18 NodeJs
vue 自定义右键样式的实例代码
2019/11/06 Javascript
Python中利用sorted()函数排序的简单教程
2015/04/27 Python
python简单文本处理的方法
2015/07/10 Python
简单介绍Python的Django框架加载模版的方式
2015/07/20 Python
Python创建对称矩阵的方法示例【基于numpy模块】
2017/10/12 Python
Python爬虫实现抓取京东店铺信息及下载图片功能示例
2018/08/07 Python
OpenCV HSV颜色识别及HSV基本颜色分量范围
2019/03/22 Python
python and or用法详解
2019/06/26 Python
解决Python3 抓取微信账单信息问题
2019/07/19 Python
python 自定义装饰器实例详解
2019/07/20 Python
python 输出列表元素实例(以空格/逗号为分隔符)
2019/12/25 Python
python线程池如何使用
2020/05/28 Python
美国从事品牌鞋类零售的连锁店:Famous Footwear
2016/08/25 全球购物
俄罗斯卫浴采暖及维修用品超级市场:Dkrussia
2020/05/12 全球购物
金融专业毕业生推荐信
2013/11/26 职场文书
高中同学聚会邀请函
2014/01/11 职场文书
股东协议书
2014/04/14 职场文书
爱护花草树木的标语
2014/06/11 职场文书
水利水电建筑施工应届生求职信
2014/07/04 职场文书
神龙架导游词
2015/02/11 职场文书
2015年小学辅导员工作总结
2015/05/27 职场文书
运动会广播稿200字
2015/08/19 职场文书
用python开发一款操作MySQL的小工具
2021/05/12 Python