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代码打包为jar软件的简单方法
Aug 04 Python
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
Jan 20 Python
详解Pytorch 使用Pytorch拟合多项式(多项式回归)
May 24 Python
对Python 内建函数和保留字详解
Oct 15 Python
解决vscode python print 输出窗口中文乱码的问题
Dec 03 Python
使用pandas实现csv/excel sheet互相转换的方法
Dec 10 Python
解决python ogr shp字段写入中文乱码的问题
Dec 31 Python
Python设计模式之桥接模式原理与用法实例分析
Jan 10 Python
在PYQT5中QscrollArea(滚动条)的使用方法
Jun 14 Python
Python Pandas 获取列匹配特定值的行的索引问题
Jul 01 Python
PyCharm 2020 激活到 2100 年的教程
Mar 25 Python
通过cmd进入python的步骤
Jun 16 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文件上传功能
2017/02/17 PHP
详解php中的implements 使用
2017/06/13 PHP
Laravel Eloquent分表方法并使用模型关联的实现
2019/11/25 PHP
读JavaScript DOM编程艺术笔记
2011/11/15 Javascript
jq实现酷炫的鼠标经过图片翻滚效果
2014/03/12 Javascript
在JavaScript里防止事件函数高频触发和高频调用的方法
2014/09/06 Javascript
纯javascript代码实现计算器功能(三种方法)
2015/09/07 Javascript
jquery实现图片列表鼠标移入微动
2016/12/01 Javascript
Vue实现自带的过滤器实例
2017/03/09 Javascript
JS简单验证上传文件类型的方法
2017/04/17 Javascript
nodejs中Express与Koa2对比分析
2018/02/06 NodeJs
原生JS+HTML5实现跟随鼠标一起流动的粒子动画效果
2018/05/03 Javascript
vue移动端路由切换实例分析
2018/05/14 Javascript
用vue快速开发app的脚手架工具
2018/06/11 Javascript
angular将html代码输出为内容的实例
2018/09/30 Javascript
微信小程序自定义组件传值 页面和组件相互传数据操作示例
2019/05/05 Javascript
vue滚动固定顶部及修改样式的实例代码
2019/05/30 Javascript
JavaScript实现图片放大镜效果
2019/06/27 Javascript
在Vue中使用this.$store或者是$route一直报错的解决
2019/11/08 Javascript
通过实例解析chrome如何在mac环境中安装vue-devtools插件
2020/07/10 Javascript
解决vue+elementui项目打包后样式变化问题
2020/08/03 Javascript
解决element-ui的下拉框有值却无法选中的情况
2020/11/07 Javascript
[42:32]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第二场 10.28
2020/10/28 DOTA
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
在Django框架中运行Python应用全攻略
2015/07/17 Python
python利用标准库如何获取本地IP示例详解
2017/11/01 Python
Python生成器的使用方法和示例代码
2019/03/04 Python
python环境路径配置以及命令行运行脚本
2019/04/02 Python
Python第三方库face_recognition在windows上的安装过程
2019/05/03 Python
Python PyPDF2模块安装使用解析
2020/01/19 Python
tensorflow 自定义损失函数示例代码
2020/02/05 Python
Pycharm生成可执行文件.exe的实现方法
2020/06/02 Python
Python3中对json格式数据的分析处理
2021/01/28 Python
zooplus德国:便宜地订购动物用品、动物饲料、动物食品
2020/05/06 全球购物
客服实习的个人自我鉴定
2013/10/20 职场文书
初中教师业务学习材料
2014/05/12 职场文书