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中zip和unzip数据的方法
May 27 Python
Python3如何解决字符编码问题详解
Apr 23 Python
深入理解Python中的*重复运算符
Oct 28 Python
python实现验证码识别功能
Jun 07 Python
python 读取dicom文件,生成info.txt和raw文件的方法
Jan 24 Python
python脚本开机自启的实现方法
Jun 28 Python
在django view中给form传入参数的例子
Jul 19 Python
python生成requirements.txt的两种方法
Sep 18 Python
详解Python list和numpy array的存储和读取方法
Nov 06 Python
Python3爬虫中关于中文分词的详解
Jul 29 Python
flask开启多线程的具体方法
Aug 02 Python
python基础之错误和异常处理
Oct 24 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 字符串正则替换函数preg_replace使用说明
2011/07/15 PHP
详解PHP+AJAX无刷新分页实现方法
2015/11/03 PHP
PHP+iframe模拟Ajax上传文件功能示例
2019/07/02 PHP
laravel 实现登陆后返回登陆前的页面方法
2019/10/03 PHP
ECMAScript 6即将带给我们新的数组操作方法前瞻
2015/01/06 Javascript
WordPress 单页面上一页下一页的实现方法【附代码】
2016/03/10 Javascript
基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
2016/05/12 Javascript
JavaScript定时器实现的原理分析
2016/12/06 Javascript
vue.js指令和组件详细介绍及实例
2017/04/06 Javascript
jquery.uploadifive插件怎么解决上传限制图片或文件大小问题
2017/05/08 jQuery
vue的token刷新处理的方法
2018/07/17 Javascript
angular学习之动态创建表单的方法
2018/12/07 Javascript
微信小程序与公众号卡券/会员打通的问题
2019/07/25 Javascript
JS this关键字在ajax中使用出现问题解决方案
2020/07/17 Javascript
vue中使用router全局守卫实现页面拦截的示例
2020/10/23 Javascript
[57:38]2018DOTA2亚洲邀请赛3月30日 小组赛A组 OpTic VS OG
2018/03/31 DOTA
在Django框架中运行Python应用全攻略
2015/07/17 Python
TensorFlow入门使用 tf.train.Saver()保存模型
2018/04/24 Python
python3.6生成器yield用法实例分析
2019/08/23 Python
python类中super() 的使用解析
2019/12/19 Python
Python random库使用方法及异常处理方案
2020/03/02 Python
python GUI模拟实现计算器
2020/06/22 Python
python如何安装下载后的模块
2020/07/03 Python
python爬虫看看虎牙女主播中谁最“顶”步骤详解
2020/12/01 Python
详解python 条件语句和while循环的实例代码
2020/12/28 Python
事业单位公务员的职业生涯规划
2014/01/15 职场文书
教师节活动主持词
2014/04/02 职场文书
项目建议书模板
2014/05/12 职场文书
2014年助理工程师工作总结
2014/11/14 职场文书
大学军训通讯稿
2015/07/18 职场文书
聘任书范文大全
2015/09/21 职场文书
教师岗位说明书
2015/09/30 职场文书
2016学习全国教书育人楷模先进事迹心得体会
2016/01/21 职场文书
Python中的tkinter库简单案例详解
2022/01/22 Python
Win10鼠标轨迹怎么开 Win10显示鼠标轨迹方法
2022/04/06 数码科技
如何优化vue打包文件过大
2022/04/13 Vue.js