当前位置: 首页 > java >正文

Python 中的MVC与MVP 框架与示例

在这里插入图片描述

🔧 一、Python 中的 MVC 框架与示例

1. 原生 Python 实现(控制台应用)
  • 核心组件
    • Model:管理数据逻辑(如读取文件、数据库操作)。
    • View:负责数据展示。
    • Controller:处理用户输入,协调 Model 和 View。
  • 示例代码(待办事项应用):
    # model.py
    class TodoModel:def __init__(self):self.todos = []def add_todo(self, task):self.todos.append(task)# view.py
    class TodoView:def show_todos(self, todos):for i, task in enumerate(todos):print(f"{i+1}. {task}")# controller.py
    class TodoController:def __init__(self):self.model = TodoModel()self.view = TodoView()def add_task(self, task):self.model.add_todo(task)def display_tasks(self):self.view.show_todos(self.model.todos)# main.py
    controller = TodoController()
    controller.add_task("学习 Python MVC")
    controller.display_tasks()
    
  • 特点:无需框架,适合理解 MVC 本质。
2. Web 框架支持
  • Django(MTV 模式,类 MVC)

    • Model:定义数据模型(ORM)。
    • View:作为控制器,处理业务逻辑。
    • Template:作为视图,渲染 HTML。
    # models.py
    from django.db import models
    class Book(models.Model):title = models.CharField(max_length=100)# views.py
    from django.shortcuts import render
    def book_list(request):books = Book.objects.all()return render(request, 'books.html', {'books': books})# books.html(模板)
    <ul>{% for book in books %}<li>{{ book.title }}</li>{% endfor %}</ul>
    
  • Flask(灵活 MVC 支持)

    • 通过路由(Controller) + 模板引擎(View) + 数据类(Model)实现。
    from flask import Flask, render_template
    app = Flask(__name__)# Model(模拟数据)
    books = [{"title": "Python基础教程"}, {"title": "Flask Web开发"}]# Controller
    @app.route('/')
    def book_list():return render_template('books.html', books=books)# View(books.html 同 Django 模板)
    

⚙️ 二、Python 中的 MVP 框架与示例

1. MVP 模式的特点
  • Presenter 替代 Controller,完全隔离 View 和 Model
  • View 通过接口与 Presenter 交互,便于单元测试。
2. 示例代码(用户管理应用)
# model.py
class UserModel:def get_user(self):return {"name": "Alice", "age": 30}# view.py(定义接口)
class IUserView:def show_user(self, user): passclass UserView(IUserView):def show_user(self, user):print(f"Name: {user['name']}, Age: {user['age']}")# presenter.py
class UserPresenter:def __init__(self, view: IUserView):self.view = viewself.model = UserModel()def update_view(self):user = self.model.get_user()self.view.show_user(user)# main.py
view = UserView()
presenter = UserPresenter(view)
presenter.update_view()
3. 框架支持
  • PyQt:桌面 GUI 开发中常用 MVP 模式,View 为 QWidget,Presenter 处理信号。
  • Web 框架(如 Flask + MVP 扩展):需自行实现 Presenter 层,较少现成框架直接支持。

💎 三、关键区别与选择建议

特性MVCMVP
数据流向View 可直接监听 ModelView 通过 Presenter 与 Model 交互
测试难度View 与 Model 耦合,测试复杂View 接口化,易于单元测试
适用场景Web 框架(Django/Flask)高测试要求的应用(如金融系统)
选择建议
  • 选 MVC:快速开发 Web 应用(Django/Flask 内置支持)。
  • 选 MVP:需高测试覆盖率或复杂交互的桌面/GUI 应用。

💻 四、实战建议

  1. 学习路径
    • 原生 MVC 示例起步(如待办事项应用)。
    • 进阶使用 Django/Flask 构建 Web 项目。
    • MVP 可尝试 PyQt 桌面开发
  2. 常见错误
    • MVC 中 View 直接操作 Model(应通过 Controller)。
    • MVP 中 Presenter 过于臃肿(需拆分逻辑到 Model)。

可通过 Django 官方教程 或 Flask MVP 示例 进一步实践。

http://www.xdnf.cn/news/12654.html

相关文章:

  • LVGL对显示接口的要求
  • 闲庭信步使用SV搭建图像测试平台:第一课——图片的读写
  • 【商城saas和商城源码的区别】
  • 【Zephyr 系列 13】BLE Mesh 入门实战:构建基础节点通信与中继组播系统
  • 类型别名与类型自动推导
  • Redis数据持久化之RDB快照
  • 【走好求职第一步】求职OMG——见面课测验4
  • SAP学习笔记 - 开发27 - 前端Fiori开发 Routing and Navigation(路由和导航)
  • 算术图片验证码(四则运算)+selenium
  • 【大模型】大模型RAG(Retrieval-Augmented Generation)面试题合集
  • 欢乐熊大话蓝牙知识16:蓝牙是怎么找设备的?扫描与广播的“对话内幕”
  • Shell编程精髓:表达式与数组实战指南
  • DbServer链接KingBase8(人大)数据库
  • Android座舱系统Agent改造方案
  • day 47
  • 微前端架构下的B端页面设计:模块化与跨团队协作的终极方案
  • Python爬虫-爬取各省份各年份高考分数线数据,进行数据分析
  • 国产pcie switch,支持PCIE 3.0/4.0/5.0,支持昇腾310/910 GPU,支持龙芯、海光、飞腾
  • 小白成长之路-Linux Shell脚本练习
  • 2025年- H77-Lc185--45.跳跃游戏II(贪心)--Java版
  • Xilinx IP 解析之 Block Memory Generator v8.4 ——01-手册重点解读(仅 Native R
  • 前端开发面试题总结-JavaScript篇(二)
  • .Net Framework 4/C# 泛型的使用、迭代器和分部类
  • 本地windows服务器部署私有云网盘Nextcloud并无公网IP实现外部访问
  • 多线程中的泛型应用深度解析:类型安全与并发编程的完美融合
  • Java方法引用深度解析:从匿名内部类到函数式编程的演进
  • 算法训练第十天
  • 分享5个免费5个在线工具网站:Docsmall、UIED Tool在线工具箱、草料二维码、图片在线压缩、表情符号
  • 【嵌入式设备】使用PICO7抓取CH341A读写EEPROM的IIC波形
  • 视频字幕质量评估的大规模细粒度基准