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

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.lqws.cn/news/204211.html

相关文章:

  • 蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析
  • Hash类型
  • 硬件电路设计—电平转换
  • Now formdata是什么?如何使用
  • Xilinx IP 解析之 Block Memory Generator v8.4 ——02-如何配置 IP(仅 Native 接口)
  • 六大设计原则
  • 2024 CKA题库+详尽解析| 15、备份还原Etcd
  • iframe(概念、简单例子、在vue项目中的使用)
  • VScode 使用 git 提交数据到指定库的完整指南
  • 设计一个算法:删除非空单链表L中结点值为x的第一个结点的前驱结点
  • 第23讲、Odoo18 邮件系统整体架构
  • 项目-- Json-Rpc框架
  • Qt学习及使用_第1部分_认识Qt---学习目的及技术准备
  • 如何判断当前web页面是在钉钉内部打开的?
  • 使用柏林噪声生成随机地图
  • C++调试(肆):WinDBG分析Dump文件汇总
  • 新能源汽车热管理核心技术解析:冬季续航提升40%的行业方案
  • LangChain面试内容整理-知识点1:LangChain架构与核心理念
  • 征文投稿:如何写一份实用的技术文档?——以软件配置为例
  • python打卡day47
  • 【MATLAB代码】基于MCC(最大相关熵)的EKF,一维滤波,用于解决观测噪声的异常|附完整代码,订阅专栏后可直接查看
  • FreeRTOS任务之深入篇
  • 打印高质量日志的10条军规
  • 【Java学习笔记】Math方法
  • 2023年12月6级第三套第二篇
  • Flask与Celery 项目应用(shared_task使用)
  • CppCon 2015 学习:Intro to the C++ Object Model
  • 使用WPF的Microsoft.Xaml.Behaviors.Wpf中通用 UI 元素事件
  • 【计算机组成原理】计算机硬件的基本组成、详细结构、工作原理
  • 前端杂货铺——TodoList