七爪源码:Django REST 框架的架构
ccwgpt 2024-10-31 12:33 41 浏览 0 评论
简介 - 什么是 Django REST 框架 (DRF)?
Django 是一个用于在 Python 中创建 Web 应用程序的框架。 虽然 Django 提供了很多功能,但构建 REST API 需要您自己实现它。
那时 Django REST Framework (DRF) 出现了,这是一个第三方 Django 包,专门用于在 Django 中开发 REST API。 默认情况下,它具有提供 REST API 所需的所有功能,并充当扩展包,扩展了有用的功能。
在实际项目中,您将使用 Django 来实现 Web 应用程序的基本功能,并使用 DRF 来实现 REST API 特定的功能。
什么是 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 进行高效开发。
关注七爪网,获取更多APP/小程序/网站源码资源!
相关推荐
- 滨州维修服务部“一区一策”强服务
-
今年以来,胜利油田地面工程维修中心滨州维修服务部探索实施“一区一策”服务模式,持续拓展新技术应用场景,以优质的服务、先进的技术,助力解决管理区各类维修难题。服务部坚持问题导向,常态化对服务范围内的13...
- 谷歌A2A协议和MCP协议有什么区别?A2A和MCP的差异是什么?
-
在人工智能的快速发展中,如何实现AI模型与外部系统的高效协作成为关键问题。谷歌主导的A2A协议(Agent-to-AgentProtocol)和Anthropic公司提出的MCP协议(ModelC...
- 谷歌大脑用架构搜索发现更好的特征金字塔结构,超越Mask-RCNN等
-
【新智元导读】谷歌大脑的研究人员发表最新成果,他们采用神经结构搜索发现了一种新的特征金字塔结构NAS-FPN,可实现比MaskR-CNN、FPN、SSD更快更好的目标检测。目前用于目标检测的最先...
- 一文彻底搞懂谷歌的Agent2Agent(A2A)协议
-
前段时间,相信大家都被谷歌发布的Agent2Agent开源协议刷屏了,简称A2A。谷歌官方也表示,A2A是在MCP之后的补充,也就是MCP可以强化大模型/Agent的能力,但每个大模型/Agent互为...
- 谷歌提出创新神经记忆架构,突破Transformer长上下文限制
-
让AI模型拥有人类的记忆能力一直是学界关注的重要课题。传统的深度学习模型虽然在许多任务上取得了显著成效,但在处理需要长期记忆的任务时往往力不从心。就像人类可以轻松记住数天前看过的文章重点,但目前的...
- 不懂设计?AI助力,人人都能成为UI设计师!
-
最近公司UI资源十分紧张,急需要通过AI来解决UI人员不足问题,我在网上发现了几款AI应用非常适合用来进行UI设计。以下是一些目前非常流行且功能强大的工具,它们能够提高UI设计效率,并帮助设计师创造出...
- 速来!手把手教你用AI完成UI界面设计
-
晨星技术说晨星技术小课堂第二季谭同学-联想晨星用户体验设计师-【晨星小课堂】讲师通过简单、清晰的语言描述就能够用几十秒自动生成一组可编辑的UI界面,AIGC对于UI设计师而言已经逐步发展成了帮助我们...
- 「分享」一端录制,多端使用的便捷 UI 自动化测试工具,开源
-
一、项目介绍Recorder是一款UI录制和回归测试工具,用于录制浏览器页面UI的操作。通过UIRecorder的录制功能,可以在自测的同时,完成测试过程的录制,生成JavaScr...
- APP自动化测试系列之Appium介绍及运行原理
-
在面试APP自动化时,有的面试官可能会问Appium的运行原理,以下介绍Appium运行原理。Appium介绍Appium概念Appium是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序...
- 【推荐】一个基于 SpringBoot 框架开发的 OA 办公自动化系统
-
如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!项目介绍oasys是一个基于springboot框架开发的OA办公自动化系统,旨在提高组织的日常运作和管理...
- 自动化实践之:从UI到接口,Playwright给你全包了!
-
作者:京东保险宋阳1背景在车险系统中,对接保司的数量众多。每当系统有新功能迭代后,基本上各个保司的报价流程都需要进行回归测试。由于保司数量多,回归测试的场景也会变得重复而繁琐,给测试团队带来了巨大的...
- 销帮帮CRM移动端UI自动化测试实践:Playwright的落地与应用
-
实施背景销帮帮自2015年成立以来,移动端UI自动化测试的落地举步维艰,移动端的UI自动化测试一直以来都未取得良好的落地。然而移动互联网时代,怎样落地移动端的UI自动化测试以快速稳定进行移动端的端到端...
- 编写自动化框架不知道该如何记录日志吗?3个方法打包呈现给你。
-
目录结构1.loguru介绍1.1什么是日志?程序运行过程中,难免会遇到各种报错。如果这种报错是在本地发现的,你还可以进行debug。但是如果程序已经上线了,你就不能使用debug方式了...
- 聊聊Python自动化脚本部署服务器全流程(详细)
-
来源:AirPython作者:星安果1.前言大家好,我是安果!日常编写的Python自动化程序,如果在本地运行稳定后,就可以考虑将它部署到服务器,结合定时任务完全解放双手但是,由于自动化程序与平...
- 「干货分享」推荐5个可以让你事半功倍的Python自动化脚本
-
作者:俊欣来源:关于数据分析与可视化相信大家都听说自动化流水线、自动化办公等专业术语,在尽量少的人工干预的情况下,机器就可以根据固定的程序指令来完成任务,大大提高了工作效率。今天小编来为大家介绍几个P...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- MVC框架 (46)
- spring框架 (46)
- 框架图 (58)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- JAVA集合框架 (47)
- mfc框架 (52)
- abb框架断路器 (48)
- ui自动化框架 (47)
- grpc框架 (55)
- ppt框架 (48)
- 内联框架 (52)
- cad怎么画框架 (58)
- ps怎么画框架 (47)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)
- oracle提交事务 (47)