django框架主要用来做什么(前端框架入门基础知识)

简介 – 什么是 Django REST 框架 (DRF)?

Django 是一个用于在 Python 中创建 Web 应用程序的框架。 虽然 Django 提供了很多功能,但构建 REST API 需要您自己实现它。

那时 Django REST Framework (DRF) 出现了,这是一个第三方 Django 包,专门用于在 Django 中开发 REST API。 默认情况下,它具有提供 REST API 所需的所有功能,并充当扩展包,扩展了有用的功能。

在实际项目中,您将使用 Django 来实现 Web 应用程序的基本功能,并使用 DRF 来实现 REST API 特定的功能。

django框架主要用来做什么(前端框架入门基础知识)

什么是 REST API?

DRF 擅长基于 REST 原则设计 Web API。

REST (Representational State Transfer) 是用于定义 Web API 的架构之一。 HTTP 协议标准的主要作者之一 Roy Fielding 于 2000 年在 Web 上的一篇博士论文中首次使用了该术语,并从那时起在网络圈子中迅速使用。

REST 理论上兼容所有协议和数据格式,但大多数使用 HTTP 并使用 JSON(JavaScript Object Notation)传输数据。其灵活性、速度和简单性使 REST 成为在 Web 上检索数据的最常用选择。

直到 2000 年,由 Microsoft 开发的简单对象访问协议 (SOAP) 是最广泛使用的客户端-服务器交互平台。但是,该协议存在以下两个问题:

  • 它要求用户遵守有关如何与服务器交互的严格规则
  • 它依赖于 XML。

为了解决 SOAP 被普遍用作网络通信的常规标准的问题,提出了一种称为 REST 的体系结构。今天,REST 是最流行的 API 之一,并已被大型全球公司(主要是 GAFA)采用为 Web 提供商。

REST 特性 – DRF 的案例

与所有其他 API 一样,REST API 允许在用户和应用程序之间移动数据。例如,每次用户登录网站或访问智能手机上的应用程序时,API 都支持客户端和主机服务器之间的通信。 REST API 充当中介,将来自用户的请求传递到服务器并从服务器返回响应。

在 DRF 中,REST API 可用于松散耦合或分离 Web 应用程序的后端和前端。此外,通过分离后端和前端,可以享受各种优势。更具体地说,通过将作为 Django 弱点的前端委托给 React 等 JavaScript 框架,您可以实现高质量的 UI(用户界面)和 UX(用户体验)。通过利用 JavaScript 框架,还可以进行 SPA(单页应用程序)开发。

DRF最大的优点是可以分前端和后端开发。

DRF 结构和问题

Django 是一个框架,旨在在单个项目中拥有多个应用程序,每个应用程序都有自己的 MVT(模型、视图、模板)。在 DRF 中,模板被序列化器移除并替换。

DRF 的简化架构由以下三个文件组成:

  • views.py:一个类,作为执行 REST API 的逻辑入口点,相当于 Ruby on Rails 中 API 的 Controller。
  • serializers.py:它为每个 API 转换请求参数和模型。它还提供验证以确保参数与模型匹配。
  • models.py:相当于 ORM(对象关系映射)。

在实际的 Web 服务中,很少只对单个表进行 CRUD 处理,因为逻辑处理是基于一些业务知识、规则或执行 REST API 时的判断。但是,如果您在不了解此类架构的情况下开始实施,您会发现自己陷入困境。

以下是DRF结构及其问题的简要说明。

问题 1:视图可能变得过于复杂

这就是在视图中写太多逻辑的问题,也就是所谓的胖控制器。这是不熟悉架构的初学者往往会遇到的问题。

在 DRF 中,在一个简单的应用程序中实现 CRUD 处理没有问题,如下所示。

from django.db import models

class Question(models.Model):
    question_text = models.CharField(max_length=10)
    pub_date = models.DateTimeField('date published')
from .models import Question
from rest_framework import serializers

class QuestionSerializer(serializers.ModelSerializer):
    class Meta:
        model = Question
        fields = '__all__'
from rest_framework import viewsets
from .models import Question
from .serializers import  QuestionSerializer

class QuestionViewSet(viewsets.ModelViewSet):
    queryset = Question.objects.all()
    serializer_class = QuestionSerializer

    '''
    No need to create a method in particular because the ModelViewSet 
    from which it is inherited defines a function that serves 
    as the API for CRUD processing.
    '''

在 DRF 端提供和隐藏 CRUD 处理。因此,在views.py中编写通常很容易,例如在保存数据时必须合并逻辑时。

问题 2:业务知识很容易分散在序列化器和模型之间

由于序列化器提供了验证,因此出现的问题是很难知道在哪里实现对值的上限和下限、字符串格式等的验证。

如果逻辑的设计方式是提供验证并因此在序列化器中实现,那么序列化器将承担多重责任。如果逻辑是在模型中实现的,那么序列化器验证的意义就丧失了。

解决方案

上述问题的解决方法如下(简述执行REST API时的行为)

执行 GET 时,按原样使用 DRF 提供的功能;当使用来自非 Django 资源的数据时,在序列化器端将其定义为 SerializerMethodField 等。

如果在执行除 GET 之外的任何方法时没有任何逻辑,请使用 Aggregate 或 DomainObject 来验证序列化程序的 validate() 函数中的值。

如果在执行除 GET 之外的任何方法时存在逻辑,则视图会将序列化程序中的数据字典作为参数传递给 application_services。然后,application_services 根据 dict 参数生成一个 Aggregate 并对其进行处理。要从数据库中的数据生成聚合,使用 IXXXReader。存储数据时,根据dict参数生成一个Aggregate,传给IXXXWriter进行存储。最后,使用序列化程序返回从 application_services 获得的字典作为响应。

概括

在本文中,我们彻底讨论了 Django REST 框架的架构、问题和解决方案。坦白说,DRF 的架构很简单,但是如果没有对架构有透彻的了解,开发应用程序应该会有问题。

我们希望本文能帮助您使用 Django REST Framework 进行高效开发。

本文内容来自网友供稿,文章观点仅代表作者本人,本站非盈利且无偿提供信息存储空间服务,不拥有所有权,如有文章有不实信息或侵犯了您的权益,请发送邮件至 cfseo1997@163.com 反馈核实,如需转载请注明出处:https://www.taobobolive.com/19066.html

(0)
上一篇 2022年12月14日 09:54:03
下一篇 2022年12月14日 09:56:09

相关推荐