MTV架构

关注公众号“轻松学编程”了解更多。

​ 通过V对M和T进行连接,用户通过T(界面)对服务器进行访问(发送请求),T把请求传给V(调度),V调用M(数据模型)获取数据,把数据给模板T进行渲染,然后再把渲染后的模板返回给用户。
####对MVC和MTV框架的理解

MVC框架与MTV框架可以理解为同一种框架,只是命名不一样,前者是相对于java等编程语言命名的,后者是相对于python命名的。
MVC框架(MTV框架)是一种 把业务逻辑、数据、界面显示分离而设计创建的Web 应用程序的开发模式。在web开发中应该尽量使代码高内聚低耦合,这样利于代码复用、维护、管理,而MVC框架(MTV框架)就是这样分层的。
M对应于Model,即数据模型(数据层),用于管理数据库,对数据进行增删改查;
V对应于view,即视图,python中的叫法是template(即T),模板,用于管理html文件,呈现给用户的界面;
C对应于controller,即控制层,python中的叫法是views(即V),视图调度器,用于访问数据层,获取数据,把数据调度给模板进行渲染,把渲染的结果返回给客户端。
MVC或MTV框架的大体流程是:
1、客户端发起请求,路由对客户发起的请求进行统一处理和分发给控制层;
2、控制层获取请求,访问数据层;
3、数据层对数据进行增删改查,把数据返回给控制层;
4、控制层获取数据,把数据调度给视图(模板);
5、视图(模板)对数据进行渲染,形成html文件返回给控制层;
6、控制层把渲染后的视图(模板)返回给客户端。

1、视图Views

  • 在【应用目录/views.py】中创建路由响应函数

    from django.http import HttpResponse
    
    def welcome(request):
    return HttpResponse('HelloDjango');
  • 在【应用目录/urls.py】中进行注册

    from App import views
    url(r'^welcome/',views.welcome)
  • 在【项目的urls】中将【应用的urls】包含进来

    from django.conf.urls import include
    url(r'^welcome/',include('App.urls'))

2、模板Templates

  • 模板就是HTML页面

  • 在工程根目录创建模板文件夹templates

  • 在【项目目录/settings.py】中注册模板文件夹

    # 模板配置
    TEMPLATES = [
    {
    ...
    # 注册模板文件夹路径
    'DIRS': [
    os.path.join(BASE_DIR, 'templates'),
    ],
    ...
    },
    ]

  • 在templates下创建xxx.html

  • 在响应函数中返回渲染后的模板

    • 方式1

      from django.template import loader
      def welcome():
      template = loader.get_template('xxx.html')
      return HttpResponse(template.render())
    • 方式2

      def welcome():
      return render(request,'xxx.html')
  • 访问静态资源

    • settings.py

      STATIC_URL = '/static/'
      STATICFILES_DIRS = [
      os.path.join(BASE_DIR, 'static'),
      ]
    • html页面

      {% load static %}
      <img src="{% static 'img/dragon.gif' %}">
      #或者 <img src="/static/img/{{ name.cName }}.jpg">
      #其中{{ name.cName }}为变量

Django内置html模板:

3、模型Models

  • 定义数据模型

    • 定义年级

      class Grade(models.Model):
      gname = models.CharField(max_length=10)
      gdate = models.DateTimeField()
      ggirlnum = models.IntegerField()
      gboynum = models.IntegerField()
      isDelete = models.BooleanField()
    • 定义学生

      class Students(models.Model):
      sname = models.CharField(max_length=20)
      sgender = models.BooleanField(default=True)
      sage = models.IntegerField()
      sinfo = models.CharField(max_length=20)
      isDelete = models.BooleanField(default=False) # 关联外键
      sgrade = models.ForeignKey(Grade)
  • 测试数据模型

    • 进入python shell

      • python manage.py shell
    • 导入包

      • from App.models import *
      • from django.utils import timezone
      • from datetime import *
    • 增删改查

      • 插入

        • grade_one = Grade()

        • 设置属性值

          grade_one.gname='python1705'
          grade_one.gdate=datetime(year=2018,month=5,day=23)
          grade_one.ggirlnum=5
          grade_one.gboynum = 60
          grade_one.isDelete = False
        • grade_one.save()

      • 查询

        • Grade.objects.all()
        • Grade.objects.get(pk=1)
      • 修改

        • grade_one.gboynum = 55
        • grade_one.save()
      • 删除

        • grade_one.delete()
    • 对象关联(外键)

      • 创建一个一年级学生

        stu = Students()
        
        stu.sname='bill'
        stu.sgender=True
        stu.sage=20
        stu.sinfo='我是比尔,不要杀我好吗' # 指定年级
        stu.sgrade=grade_one stu.save()
      • 获取一年级所有学生

        • grade_one.students_set.all()
  • 结合使用

    • 在urls配置路由规则

    • 在views中调用models中的函数进行查询

    • views向模板传递数据

    • 在模板中对数据进行渲染

      {% for student in students %}
      {{student}}
      {% endfor %}
    • views返回渲染后的模板

后记

【后记】为了让大家能够轻松学编程,我创建了一个公众号【轻松学编程】,里面有让你快速学会编程的文章,当然也有一些干货提高你的编程水平,也有一些编程项目适合做一些课程设计等课题。

也可加我微信【1257309054】,拉你进群,大家一起交流学习。
如果文章对您有帮助,请我喝杯咖啡吧!

公众号

微信

赞赏码

python框架Django中的MTV架构的更多相关文章

  1. python框架Django中MTV之Model(数据模型)

    MTV框架之Model(数据模型) 关注公众号"轻松学编程"了解更多. 1.连接MySQL数据库 项目中的settings.py设置范例 # 配置数据库 DATABASES = { ...

  2. python框架django中结合vue进行前后端分离

    一:创建django项目 1.django-admin startproject mysite # 创建mysite项目 2.django-admin startapp app01# 创建app01应 ...

  3. python框架Django中MTV框架之VIew(业务控制器)

    MTV框架之VIew(业务控制器) 关注公众号"轻松学编程"了解更多. 1.什么是视图 视图层=路由表(urls.py)+视图函数(views.py) 其角色相当于MVC中的Con ...

  4. python框架Django中MTV框架之Template(模板/界面)

    MTV框架之Template(模板/界面) 关注公众号"轻松学编程"了解更多. 1.模板目录位置 应用下 不需要注册 无法跨应用地进行复用 工程下 需要注册 settings.py ...

  5. Flask 中的MTV架构之Models

    Flask 中的MTV架构之Models 1.Models(数据模型) 1.1 flask-sqlalchemy(数据库) ​ 说明:提供了大多数关系型数据库的支持,而且提供了ORM # 安装: pi ...

  6. Flask中的MTV架构之Templates

    Flask 中的MTV架构之Templates 关注公众号"轻松学编程"了解更多. 1.Templates(模板引擎) 1.1 说明 ​ 模板文件就是按照特定规则书写的一个负责展示 ...

  7. Flask 中的MTV架构之Views

    Flask 中的MTV架构之Views 1.MVC与MTV 1.1 MVC ​ M:model,模型,数据模型 ​ V:view,视图,负责数据展示 ​ C:controller,控制器,负责业务逻辑 ...

  8. 编程 - Python - 框架 - Django

    一.Django简介 百度百科:一个开放源代码的Web框架,由Python语言编写...... 重点:一个大而全的框架,啥都替你考虑好了. 1. web框架介绍 具体介绍Django之前,必须先介绍W ...

  9. python框架Django简介与安装

    Django简介 关注公众号"轻松学编程"了解更多. 发布于2005年,最负盛名且成熟的Python网络框架 最初用来制作在线新闻的Web站点 开源Web框架,遵守BSD协议 BS ...

随机推荐

  1. springboot项目打包瘦身

    默认情况下,Spring Boot 项目发布时会将项目代码和项目的所有依赖文件一起打成一个可执行的 jar 包.但如果项目的依赖包很多,那么这个文件就会非常大.这样每次即使只改动一点东西,就需要将整个 ...

  2. 使用精灵代理ip最节约成本的策略!

    使用ip代理业务用例 1.使用精灵代理(http://www.jinglingdaili.com/Shop-index.html),通过Api获取,每次返回一个固定时间(五分钟)的IP,然后将获取到的 ...

  3. selenium-自动化测试51job网站(MacOS + Safari)2020年10月6日

    登录 51job ,http://www.51job.com 输入搜索关键词 "python", 地区选择 "杭州"(注意,如果所在地已经选中其他地区,要去掉) ...

  4. 082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法

    082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法 本文知识点:构造方法-无参构造方法 说明:因为时间紧张, ...

  5. IDEA中创建父子工程与maven打包Springboot聚合工程报错程序包不存在问题处理

    公司新项目需使用java技术栈,便使用IDEA搭建了一个多SpringBoot项目的聚合工程,因为初次使用,遇到了很多问题,maven打包时各种报错,在网上查了好多终于解决了,为巩固记忆,特作此记录. ...

  6. 使用Jest快照测试api

    你知道什么很烦人吗?API不匹配. 有一天,后台开发人员在没有通知前端开发人员的情况下更改了其中一个api."我们认为dateCreated这个名字比created_at更好,"他 ...

  7. NOI 2011 【阿狸的打字机】

    之前讲了[AC自动姬],今天我终于把这题给刚下来了...嗯,来给大家讲一讲. 题目描述: 打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母.经阿狸研究发现,这个打字机是这样工 ...

  8. android的adb命令整理

    adb.exe的路径在Android\Sdk\platform-tools 把这个路径加入到系统的path环境下. 先用usb连接设备,比如一台android手机 adb tcpip 5555 adb ...

  9. 拉格朗日乘子法与KKT条件

    拉格朗日乘子法 \[min \quad f = 2x_1^2+3x_2^2+7x_3^2 \\s.t. \quad 2x_1+x_2 = 1 \\ \quad \quad \quad 2x_2+3x_ ...

  10. [Docker]linux异常关机,docker镜像丢失

    在运行中的docker容器遇到意外情况,可能会自动终止运行,例如磁盘空间不足. 解决办法: 找到/var/lib/docker/containers文件夹下的所有容器ID 执行命令,查看容器信息 ,找 ...