当前位置 : 主页 > 编程语言 > python >

python框架Django中的MTV架构

来源:互联网 收集:自由互联 发布时间:2022-06-15
MTV架构 关注公众号“轻松学编程”了解更多。 ​ 通过V对M和T进行连接,用户通过T(界面)对服务器进行访问(发送请求),T把请求传给V(调度),V调用M(数据模型)获取数据,把数据给模


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
    python框架Django中的MTV架构_django
  • 在【项目目录/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模板:

python框架Django中的MTV架构_数据_02

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返回渲染后的模板

后记

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

公众号

python框架Django中的MTV架构_python_03


上一篇:python框架Django中MTV之Model(数据模型)
下一篇:没有了
网友评论