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 相关文章推荐
在Django框架中编写Context处理器的方法
Jul 20 Python
python 全文检索引擎详解
Apr 25 Python
python3实现公众号每日定时发送日报和图片
Feb 24 Python
python os用法总结
Jun 08 Python
Python实现基于POS算法的区块链
Aug 07 Python
python pygame实现2048游戏
Nov 20 Python
python 实现提取某个索引中某个时间段的数据方法
Feb 01 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
Jul 22 Python
详解使用Python下载文件的几种方法
Oct 13 Python
使用tensorflow显示pb模型的所有网络结点方式
Jan 23 Python
python模拟预测一下新型冠状病毒肺炎的数据
Feb 01 Python
PyQt中使用QtSql连接MySql数据库的方法
Jul 28 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 isset()与empty()的使用区别详解
2010/08/29 PHP
windows环境下php配置memcache的具体操作步骤
2013/06/09 PHP
PHP实现的迷你漂流瓶
2015/07/29 PHP
PHP查询大量数据内存耗尽问题的解决方法
2016/10/28 PHP
PhpStorm2020.1 安装 debug - Postman 调用的详细教程
2020/08/17 PHP
jQuery chili图片远处放大插件
2009/11/30 Javascript
iframe子父页面调用js函数示例
2013/11/07 Javascript
JavaScript中伪协议 javascript:使用探讨
2014/07/18 Javascript
sails框架的学习指南
2014/12/22 Javascript
JavaScript使用FileSystemObject对象写入文本文件内容的方法
2015/08/05 Javascript
深入浅析JavaScript中的constructor
2016/04/19 Javascript
javascript运算符——逻辑运算符全面解析
2016/06/27 Javascript
JavaScript原生数组Array常用方法
2017/04/06 Javascript
JSON在Javascript中的使用(eval和JSON.parse的区别)详细解析
2017/09/05 Javascript
基于vue2实现左滑删除功能
2017/11/28 Javascript
webpack实现一个行内样式px转vw的loader示例
2018/09/13 Javascript
Vue自定义指令上报Google Analytics事件统计的方法
2019/02/25 Javascript
[38:30]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场2
2014/05/24 DOTA
[03:48]大碗DOTA
2019/07/25 DOTA
Python StringIO模块实现在内存缓冲区中读写数据
2015/04/08 Python
用Python实现一个简单的能够上传下载的HTTP服务器
2015/05/05 Python
在Python程序和Flask框架中使用SQLAlchemy的教程
2016/06/06 Python
基于Python3 逗号代码 和 字符图网格(详谈)
2017/06/22 Python
浅谈机器学习需要的了解的十大算法
2017/12/15 Python
Django 用户认证组件使用详解
2019/07/23 Python
python是否适合网页编程详解
2019/10/04 Python
python调用函数、类和文件操作简单实例总结
2019/11/29 Python
windows python3安装Jupyter Notebooks教程
2020/04/13 Python
python实现逻辑回归的示例
2020/10/09 Python
澳大利亚百货商店中销量第一的商务衬衫品牌:Van Heusen
2018/07/26 全球购物
澳大利亚在线购买葡萄酒:The Wine Collective
2020/02/20 全球购物
《秋游》教学反思
2014/04/24 职场文书
社区春季防火方案
2014/06/02 职场文书
党员个人剖析材料
2014/09/30 职场文书
如何在centos上使用yum安装rabbitmq-server
2021/03/31 Servers
解决tk mapper 通用mapper的bug问题
2021/06/16 Java/Android