Django系列

Django简介与MTV架构体系概述


作者李俊才 (jcLee95)https://blog.csdn.net/qq_28550263
邮箱291148484@163.com
本文地址https://blog.csdn.net/qq_28550263/article/details/132890054


介绍】:Django简介与MTV架构体系概述

一节:《 Django开发环境配置


在这里插入图片描述


1. 概述

1.1 为什么想写Django

记得2019年时初学Django,这也是我学习第一个Web后端框架,也是至今为止我最喜欢的一个。19年时,当时发的第一篇博客就是关于Django如何解决跨域问题总结。近几年做过很多不同领域项目,包括前端桌面端、移动端的应用开发应用开发中都会设计一个共同的问题,就是数据从哪里来。

软件应用开发中,关于数据处理可以分成两大领域一个领域处理内存中的数据我们称之为状态管理;另一个领域数据持久化。当然,如果你说我做的时一个本地应用比如单机游戏计算器使用程序,等等,他们所涉及的数据处理往往集中与状态管理,以及简单的本地存储。但是如果你做的应用是一个网络应用,则一般不可避免要使用数据库,尤其是基于客户端服务器体系软件模式

网络应用中,数据的来源和管理变得更加复杂。这时候我们需要一个强大的后端框架来帮助我们处理各种数据操作,包括接收存储检索传输数据。这正是Django的用武之地。

Django是一个高度定制的Python后端框架,它提供了丰富的功能工具用于处理数据相关的所有任务。不管你是构建社交媒体平台电子商务网站博客在线学习平台还是任何其他类型的Web应用,Django都可以成为你的得力助手

前后分离的开发体系中,后端的作用至关重要。它充当着数据的守护者和处理者,负责接受前端发送请求处理这些请求,并将响应返回给前端。这种分离的开发模式使前端工程师和后端工程师能够独立开发各自的部分,从而提高了开发效率和代码可维护性

1.2 Django框架的优缺点

Django的优势在于其强大的数据处理能力。它提供了内置数据库支持,你可以选择使用不同数据库后端(如SQLite、MySQL、PostgreSQL等),根据项目需求进行配置。Django的ORM(对象关系映射)让你可以使用Python类来表示数据库中的表格关系,而不需要编写复杂的SQL查询语句。这简化数据持久化的过程,并提高代码的可读性。

此外,Django还提供了许多其他功能,如用户认证安全性缓存管理国际化等,使开发者能够专注于业务逻辑而不必担心底层技术细节

总结起来,Django框架具体有以下优点。

概述 描述
完整的开发框架 Django提供了一个完整的开发框架,包括ORM(对象关系映射)、认证、管理后台表单处理国际化功能。这意味着你可以更专注于业务逻辑,而不必从头构建这些常见功能
高度定制 虽然Django提供了很多内置功能,但它也允许开发者高度定制应用程序。你可以轻松地根据项目需求添加自定义模型视图中间件等。
强大的社区支持 Django拥有一个庞大的活跃社区,这意味着你可以找到大量的文档教程第三方库和插件,以及得到问题快速解答。
安全性 Django有内置安全性功能,包括防止SQL注入跨站脚本攻击(XSS)、跨站点请求伪造(CSRF)等。这些功能有助于保护应用程序免受常见的Web安全漏洞
ORM(对象关系映射 Django的ORM允许你使用Python类来表示数据库模型,而不需要编写SQL语句。这简化了数据持久化的过程提高代码的可读性和可维护性
丰富的第三方 Django生态系统中有许多第三方库和插件,可以扩展功能例如Django REST framework用于构建RESTful API,Django CMS用于内容管理等。

同时也必须要指出,作为一款重型Web框架,他虽然提供了强大丰富的功能,但也有显而易见的一些缺点。

概述 描述
学习曲线 对于初学者来说,Django的学习曲线可能相对陡峭。尤其是对于那些没有经验的开发者,需要一些时间理解框架的各个方面。
过于重量 虽然Django的完整性是其优点之一,但对于一些小型项目来说,它可能显得过于重量级。对于一些特定需求的微服务项目选择轻量级的框架可能更合适。
不适合实时应用 Django在处理实时应用和长连接方面表现不佳。如果你的项目需要大规模实时数据处理可能需要考虑其他框架或技术栈。
某些功能需要第三方 尽管Django提供了很多功能,但某些高级功能可能需要依赖第三方库。这可能会导致项目的复杂性增加,需要额外的配置和集成工作

接下来本文将探讨如何配置Django的开发环境以便你能够开始编写测试自己的Web应用程序。在进行这一步之前,请确保你已经安装了Python,因为Django是一个基于Python的框架。

2. MTV架构

2.1 概述

2.1.1 是什么 MTV

Django的MTV架构是其成功的关键之一,它将应用程序不同方面明确定义并分离开来,从而提供了一个强大而有组织的开发框架。

MTV 代表ModelTemplateView,是Django框架的核心设计理念之一,它有助于将应用程序不同组成部分分离开来,以提高代码可维护性和可扩展性

2.1.2 MTV 与 MVC的关系

广义上看,Django的MTV也属于MVC体系。在传统的MVC模式中,有三个主要组件
Model(模型负责表示管理应用程序的数据。
View(视图)负责用户界面呈现,将数据从模型传递用户界面
Controller控制器负责接受用户输入处理业务逻辑,并调用模型和视图来执行相应的操作。
MVC模式的关键思想是将应用程序分为 数据用户界面控制逻辑 三个独立组件

实际上,Django中也是如此,只不过它在术语和组织上有所不同

Model(模型: 与MVC中的模型类似,负责表示管理应用程序的数据。模型定义数据库结构和数据之间的关系
Template(模板: 与MVC中的视图(View)类似,但在Django中,模板用于呈现用户界面。它包含了 HTML 和 Django 模板语言标记用于渲染页面显示数据。不过需要指出是,在如今的实际开发中,都采用前后端分离的体系,因此Template基本上是不怎么使用的(仅限于后端自己玩玩即可),前端框架如Vue、React等都有自己的模板语法,如React中使用的JSX/TSX,Vue中的单文件组件及其各种模板语法,开发效率都远远高于后端框架,毕竟后端的模板本质上都是拼凑和处理htmljscss字符串
View(视图): 与MVC中的控制器(Controller)类似,但在Django中,视图负责接受HTTP请求,处理业务逻辑,然后使用模型和模板来生成HTTP响应

之所以这样组术语,因为Django希望强调它的几大主要功能,比如说它的其功能强大的模板层,提供了 开箱即用模板语法。事实上,在Django中多数功能都是开箱即用的,这在后续文章的详细介绍中将会看到

接下来本节将分别介绍绍Django的MTV架构中的每个组成部分

2.2 Model(数据模型层)

模型是Django应用程序的数据存储部分。它定义了应用程序的数据结构,包括数据库表格字段以及表格之间的关系
模型通常由Python类表示,这些类继承自Django的模型基类每个模型类代表了一个数据库表格。使用模型类,你可以定义数据结构验证规则关系数据库查询方法。Django的ORM(对象关系映射)允许你通过Python代码来操作数据库,而不需要直接编写SQL语句

当使用Django开发Web应用程序时,模型(Model)是数据层的核心组件,它提供了一种高级、Pythonic方式管理应用程序的数据。下面我们将初步从不同角度体验一下Django的Model层。

数据结构定义

在Django中,每个模型类代表了应用程序中的一个数据结构,通常对应数据库中表格。这些模型类是Python类,它们定义了表格字段字段数据类型例如,你可以创建一个模型类来表示用户(User):

from django.db import models

class User(models.Model):
    username = models.CharField(max_length=100)
    email = models.EmailField()
    date_joined = models.DateTimeField(auto_now_add=True)

这个模型定义了一个名为 User数据结构,包括了用户名username)、电子邮件email)和注册日期date_joined)等字段

验证规则

Django模型允许你定义字段验证规则,以确保数据的完整性和一致性例如,你可以要求电子邮件字段的值必须是有效的电子邮件地址,并且用户名字段长度不得超过一定限制。这些验证规则可以在模型类中参数的形式定义。

数据表之间的关系

在现实世界的应用程序中,数据之间通常存在复杂的关系。Django模型允许你定义不同表格之间的关系,如 一对多对一多对多 关系。这些关系可以通过 字段 来表示,如 ForeignKeyManyToManyField

例如,如果你的应用程序需要表示用户他们文章之间的关系,可以使用 ForeignKey 字段

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    author = models.ForeignKey(User, on_delete=models.CASCADE)

这里author字段是一个外键,它建立了Article模型和User模型之间的关系,表示每篇文章都有一个作者作者是一个User对象

数据库查询方法

Django的 ORM 允许你通过Python代码行数据库查询,而不需要编写原生的SQL语句。你可以使用模型类的方法执行常见查询操作,如过滤排序聚合等。这使得数据的检索和操作变得更加容易和可读。

例如,你可以使用以下代码获取所有用户名字母顺序排列用户

users = User.objects.order_by('username')

这里User.objects是一个查询集(QuerySet),它允许你链式调用多个查询方法,以便构建复杂的查询。

数据库迁移

Django的模型还包括一个重要功能,即数据库迁移。它可以自动检测模型类的变化,并生成相应的数据库迁移文件,以便你可以轻松地将数据库模式更新最新版本,而无需手动编写SQL迁移脚本

例如,当你添加一个新的字段或修改字段的属性时,Django可以生成迁移文件,然后你可以运行迁移命令更新数据库:

python manage.py makemigrations  # 生成迁移文件
python manage.py migrate         # 应用迁移以更新数据库

总而言之,Django的模型提供了一个强大的工具,用于定义数据结构验证数据、建立数据之间的关系,并且可以通过Python代码进行数据库查询。这种高级的ORM能力大大简化了数据层的开发和维护,同时提高了代码的可读性和可维护性

2.3 View(视图层

Django视图层是Django应用程序的逻辑处理部分。它接收来自用户的HTTP请求,执行相应的操作,然后返回HTTP响应。视图层通常是Python函数基于函数的视图)或类(基于类的视图),它们处理URL映射和请求处理逻辑。每个视图函数接收HTTP请求,执行必要的数据处理,然后通过模板生成响应

图层任务包括从数据库中检索数据、对数据进行操作、验证用户身份渲染模板以及返回HTTP响应。Django的URL映射机制将不同的URL路由到相应的视图函数

视图函数和视图类

图层通常由Python函数或类组成,它们被称为视图函数或视图类。

基于函数的视图(Function-Based Views

这是最常见简单的形式,其中视图是一个Python函数,接收HTTP请求作为参数,并返回HTTP响应。例如:

from django.http import HttpResponse

def my_view(request):
    # 处理请求的逻辑
    return HttpResponse("Hello, World!")
基于类的视图(Class-Based Views

这是一种更高级方式,它允许你使用类来组织视图逻辑,每个类的方法对应于不同的HTTP请求方法(如GET、POST)。这提供了更好的代码组织和可重用性。例如:

from django.http import HttpResponse
from django.views import View

class MyView(View):
    def get(self, request):
        # 处理GET请求的逻辑
        return HttpResponse("Hello, World!")
URL映射

Django的URL映射机制将不同的URL路由到相应的视图函数或视图类。通过在Django应用程序的URL配置中定义URL模式(URL patterns),你可以将特定的URL路径映射到特定的视图。这允许你组织管理应用程序的URL结构。

请求和响应处理

DjangoURL 映射机制将不同的URL路由到相应的视图函数或视图类。
通过Django 应用程序的URL配置中定义 URL模板(URL patterns),你可以将特定的 URL 路径映射到特定的视图。这允许你组织和管理应用程序的 URL 结构。

HTTP响应

视图函数或视图类的最终任务返回 HTTP响应对象 。HTTP响应包含了要发送客户端的内容,如HTML内容、JSON数据等。
通常,你可以使用Django提供的 HttpResponse类创建响应对象,或者使用更高级的响应类来处理不同的情况,如JsonResponseHttpResponseRedirect 等。

其中,HttpResponse 类用于创建基本HTTP 响应对象,通常用于返回 HTML 内容;JsonResponse 类用于创建包含 JSON 数据的 HTTP 响应对象。这在构建 API 或需要返回结构化数据的情况下非常有用;而HttpResponseRedirect 类用于重定向用户到另一个URL。这在处理表单提交后通常用于将用户重定向到成功页面或其他页面。

2.4 Template(模板层)

Django模板层是Django应用程序的用户界面部分。它定义了应用程序的前端布局显示方式。模板层中通常是HTML文件,但其中可以包含Django模板语言的标记和逻辑。Django模板语言允许你嵌入动态数据和逻辑控制,以便在渲染生成具体的HTML内容。使用模板,你可以将数据从后端传递到前端,以便在浏览器呈现给用户。模板层的重要任务是将数据和用户界面有效地结合起来。

虽然Django中提供了强大的模板语法功能,但是在前后端分离的大环境下,很多情况下我们并不怎么使用它。事实上,是否使用模板语法理解评价Django的模板语法以及前后端分离的实践,是一个重要的话题,它取决于不同方面的考量。读者可以参考下面的不同角度决定是否需要使用Django的模板层。

1. 模板语法的优点

项目 描述
快速原型设计 模板语法允许后端开发人员快速创建原型生成基本的前端界面,这在项目早期或需要快速迭代的情况下可能很有价值。对于一些简单的页面,使用模板语法可能更加高效
简化小规模项目 对于小规模项目或内部工具,Django的模板语法可以提供足够的功能,无需引入复杂的前端框架。这可以减少项目的复杂性和维护成本
无需前端开发人员 一些项目可能没有专门的前端开发人员资源。在这种情况下,后端开发人员可以使用模板语法来处理整个应用程序的用户界面

2. 前后端分离的优势

项目 描述
分工合作 前后端分离允许前端和后端开发人员专注于各自的领域前端开发人员可以更好地处理用户界面复杂性,而后端开发人员可以专注于业务逻辑和数据处理
更好的性能 前后端分离允许前端应用程序与后端API分离运行,这有助于提高应用程序的性能和加载速度。前端应用程序可以被缓存,并且可以独立扩展优化
灵活性和创新 使用现代前端框架如React、Vue等,开发人员可以更轻松地实现复杂的用户交互动画效果。这些框架提供了更多的灵活性和创新空间

3. Django模板使用场景

项目 描述
适用于小型项目和原型 Django模板语法在小型项目、原型设计内部工具开发中可能仍然有用。这些情况下,可以快速构建简单的用户界面而无需引入前端框架
前后端分离对大型应用更合适 对于大型应用、高性能要求、复杂交互和多平台支持场景,前后端分离通常更合适。现代前端框架提供了更多的工具和性能优势

4. 其它建议

总的来说,Django的模板语法具有一些优点,比如在小型项目和原型设计中,但前后端分离的做法在大型应用和复杂用户界面方面更具竞争力。开发团队应根据具体项目需求和资源来做出决策,并根据情况选择使用何种技术工具

3. 学习Django的建议

3.1 开始学习Django

Django是基于Python的Web框架,所以首先需要熟悉Python编程语言。Django官方文档是学习Django的最佳资源之一。开始时,阅读官方教程是一个很好的起点。官方文档还提供了详细的参考资料,涵盖了Django的每个方面。

Django官方网站地址为:https://docs.djangoproject.com/,你可以在Document标签阅读其文档:https://docs.djangoproject.com/en/4.2/intro/overview/

一旦你理解了Django的基础概念尝试构建一些小型项目来实践你的知识。这有助于你熟悉Django的工作流程

3.2 关于 Django 文档

Django的官方文档分为以下几个部分,可以参考查询相应的页面。

1. 入门
2.模型层
3.视图层
4.模板层
5.表单
6.开发过程

、ASGI服务器、部署静态文件、通过电子邮件跟踪代码错误以及部署检查表信息

7.管理界面
8.安全性
9.国际化和本地化
  • 概述: 介绍了Django提供的强大的国际化和本地化框架,以帮助你开发多语言和多地区的应用程序。

  • 时区 学习关于时区的信息。

10.性能和优化
11.地理框架
12.常见Web应用程序工具
13.其他核心功能
14.Django开源项目

原文地址:https://blog.csdn.net/qq_28550263/article/details/132890054

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_29114.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注