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中的__init__ 、__new__、__call__小结
Apr 25 Python
python批量同步web服务器代码核心程序
Sep 01 Python
采用Psyco实现python执行速度提高到与编译语言一样的水平
Oct 11 Python
python实现简单购物商城
May 21 Python
VSCode下配置python调试运行环境的方法
Apr 06 Python
在python中,使用scatter绘制散点图的实例
Jul 03 Python
pycharm 安装JPype的教程
Aug 08 Python
python 二维矩阵转三维矩阵示例
Nov 30 Python
Python socket聊天脚本代码实例
Jan 02 Python
Python中用pyinstaller打包时的图标问题及解决方法
Feb 17 Python
Python如何使用27行代码绘制星星图
Jul 20 Python
python中@property的作用和getter setter的解释
Dec 22 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中文乱码怎么办如何让浏览器自动识别utf-8
2014/01/15 PHP
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
2014/06/26 PHP
PHP调用其他文件中的类
2018/04/02 PHP
laravel数据库查询结果自动转数组修改实例
2021/02/27 PHP
对联广告js flash激活
2006/10/19 Javascript
javascript如何判断输入的url是否正确
2014/04/11 Javascript
jQuery中children()方法用法实例
2015/01/07 Javascript
九种原生js动画效果
2015/11/11 Javascript
javascript显示上周、上个月日期的处理方法
2016/02/03 Javascript
js实现控制textarea输入字符串的个数,鼠标按下抬起判断输入字符数
2016/10/25 Javascript
JavaScript & jQuery完美判断图片是否加载完毕
2017/01/08 Javascript
原生JS轮播图插件
2017/02/09 Javascript
MUI  Scroll插件的使用详解
2017/04/13 Javascript
JavaScript中递归实现的方法及其区别
2017/09/12 Javascript
vue控制多行文字展开收起的实现示例
2019/10/11 Javascript
ant design vue datepicker日期选择器中文化操作
2020/10/28 Javascript
[01:15:44]首部DOTA2纪录片今日23时全网上映
2014/03/19 DOTA
[06:24]DOTA2 2015国际邀请赛中国区预选赛第二日TOP10
2015/05/27 DOTA
两个命令把 Vim 打造成 Python IDE的方法
2016/03/20 Python
Python给你的头像加上圣诞帽
2018/01/04 Python
python中logging包的使用总结
2018/02/28 Python
python实现视频分帧效果
2019/05/31 Python
Python 占位符的使用方法详解
2019/07/10 Python
Python解决pip install时出现的Could not fetch URL问题
2019/08/01 Python
使用keras实现非线性回归(两种加激活函数的方式)
2020/07/05 Python
html5实现图片转圈的动画效果——让页面动起来
2017/10/16 HTML / CSS
初中物理教学反思
2014/01/14 职场文书
节电标语大全
2014/06/23 职场文书
竞选班干部演讲稿100字
2014/08/20 职场文书
2014教育局对照检查材料思想汇报
2014/09/23 职场文书
大学生逃课检讨书
2015/05/04 职场文书
2015年乡镇组织委员工作总结
2015/10/23 职场文书
Python Numpy之linspace用法说明
2021/04/17 Python
vue项目两种方式实现竖向表格的思路分析
2021/04/28 Vue.js
python本地文件服务器实例教程
2021/05/02 Python
JS setTimeout与setInterval的区别
2022/04/20 Javascript