龙空技术网

如何理解Django MTV框架模式

太古星空 152

前言:

此时你们对“djangoajax删除元素”都比较注重,小伙伴们都想要了解一些“djangoajax删除元素”的相关资讯。那么小编同时在网络上搜集了一些关于“djangoajax删除元素””的相关资讯,希望我们能喜欢,小伙伴们快快来了解一下吧!

很多Django初学者,面对Django的诸多概念,难免觉得Django内容多上手难。确实,Django有其上手“门槛”,但是其实Django有其自有的内在结构逻辑,这个结构逻辑其实就是MTV模式,理解了这个结构,对后面学习Django会提纲挈领的作用。

在我的上一篇文章“Django 4.0 Form中template_name使用”,第一部分记录了一个Django的hello world项目的创建过程。我们已经知道了如何创建Django项目,也清楚了如何在项目中添加一个APP。让我们从这个角度理解,其实Django开发就是建立网页的过程,我们所做的事情,无论是用户登录,各种展示界面,都是在构建网页。构建的网页代码分散在下图的各个地方。

Django MTV模型示意图

如图,用户输入一个链接:127.0.0.1:8000/home,这时候浏览器发送HTTP请求到Django,Django首先从url中找到这个路径对应的是哪个view,然后Django在view中处理相关代码,代码执行完成后Django将要展示的网页反馈给浏览器。通过上图我们发现,我们只需要理解以下四个知识点,便能掌握Django MTV模式精髓。

Urls.pyViews.pyModels.py模板html

一、定义URL

url分为项目url和app url,顾名思义,项目url在项目创建的时候就建立了,存放在与项目同名的文件夹内。其实我们所有的url映射都可以写在项目的url中,但是为了可读性以及低耦合性,Django支持app内定义url。url的文件结构一般如下:

Django Url结构

项目url内容一般这样:

from django.contrib import adminfrom django.urls import include, path, urlpatterns = [   path('home', include('home.urls')),   path('news/', include('news.urls')),   path('admin/', admin.site.urls),]

上面代码说明,home文件路径,需要去home.url寻找对应的view。

Home App url内容一般这样:

from django.urls import pathfrom . import viewsapp_name="home"urlpatterns = [   path('', views.index, name='index'),]

在app url中,我们找到home路径,对应views.py中的index函数。接下来我们进入了第二步,分析view函数。

二、View函数

定位到index函数后,我们看看一般会做什么。假设网站首页有需要展示的栏目,在view函数内,一般需要这样做:

通过栏目model,查找并获得栏目数据;定义一下这个函数选用那个模板,然后将数组数据、包括其他任意展示需要的数据放入context;最后调用render渲染,可以理解为把context数据装进模板,返回给浏览器。

上面3点对应的代码如下:

from django.shortcuts import render# Create your views here.from django.http import HttpResponsefrom cases.models import OurCasesdef index(request):    categories= Category.objects.all()    context = {       ' categories ': categories,    }    return render(request, 'home/index.html', context)

三、模型Model

Django的模型包括model类以及对象关系映射ORM。Django对主流的数据库诸如PostgreSQL、MySQL、SQLite、Oracle提供了很好的封装,我们通过对Model类的操作,就实现了对数据库的增删改查的操作,也就是说在编程的时候,完全不用考虑对象存储到数据库的过程,这些ORM已经帮我们完成了。

Django Model类以及对象关系映射ORM

上图清晰的展示了model与数据库的关系,Models就相当于程序语言中的类的概念,封装了属性和方法,每个Model映射到数据库中的一张数据表,对象的实例就相当于一条记录,属性相当于数据表中的一个字段。

理论简单的解释完毕,继续说代码,前面我们在View中调用的栏目数据,就是通过Models定义,Models一般在app的models.py中,栏目的定义一般这样:

from django.db import modelsclass Category(models.Model):   name = models.CharField(_('name'), max_length=255, default=_(''))   description = models.TextField(_('description'), blank=True)   def __str__(self):       return self.name

获得所有栏目的数据,就是上文View函数中的一行代码:

categories = Category.objects.all()

是不是非常方便?

至于models中字段、外键等一对多、多对多等关系用法,因为这篇文章是科普入门,就不多讲了。

四、模板Template

前面通过一行代码取来的数据,如何展示,全靠模板Template来组织。

模板的文件组织结构和url一样,也是分为全局项目模板和app模板;Django模板通常是一个文本文件,当然在绝大多数情况下这个文本文件是HTML文件;模板通过模板标记可以操作循环引入继承等功能;装入模板的context的内容,在模板中就叫做模板变量,通过{{}}等标识展示;然后还可以使用过滤器调整展示变量。

想了解更详细的模板知识可以参考我写的文章“Django模板概述”。

五、总结

Django MTV模式起始于urls路由,核心在于view中的函数,称为核心主要因为Django在view函数里面执行具体的数据操作以及进行模板选择及返回浏览器展示信息。

理解了MTV,再往后学习,其实我们会发现Django Form或者Ajax使用也是遵循同样的脉络、现在流行的Django Rest Framework结构也和MTV很相似,掌握MTV了这条主线,再逐渐完善Django Admin管理站点、文件管理、认证和权限、session等知识点,相信大家很快能掌握Django这个“强大的武器”。

(文完,更多文章可关注微信公众号:Django编程)

标签: #djangoajax删除元素