当前位置: 首页 > news >正文

Django REST Framework

1. 什么是 DRF?

Django REST Framework 是一个功能强大且灵活的工具包,用于在 Django 中构建 Web API

  • 它不是框架:它不是一个独立的框架,而是构建在 Django 之上的一系列可重用组件。

  • 它的目的:让你能够快速、轻松地构建 RESTful API,并遵循 Django 的设计哲学(如 DRY 原则)。

  • 它的特点:提供了序列化、视图、路由、认证、权限、限流等一套完整的解决方案,大大减少了构建 API 的重复性工作。


2. 为什么使用 DRF?(它的优势)

  1. 强大的序列化器:核心功能之一,可以轻松地将复杂的 Django 模型(QuerySet)序列化为 JSON、XML 等格式,反之亦然(反序列化并进行数据验证)。

  2. 丰富的类视图:提供了 APIViewGenericAPIView, 以及各种 Mixin,让你可以用很少的代码实现标准的 CRUD 操作。

  3. 可浏览的 API:开箱即用!DRF 会自动为你的 API 生成一个美观的、可交互的 Web 界面,方便开发人员测试和调试,无需额外工具(如 Postman)。

  4. 全面的认证与权限:内置了多种认证方案(Token、Session、JWT 等)和权限控制(IsAuthenticated、IsAdminUser、自定义权限等),保障 API 安全。

  5. 极高的灵活性:虽然提供了很多“开箱即用”的功能,但每个组件都可以被轻松地定制和重写,以适应复杂的业务需求。

  6. 庞大的社区和生态:作为 Django 生态中最流行的 API 框架,拥有丰富的教程、插件和社区支持。

3. 核心组件与工作流程

要理解 DRF,最重要的是理解它的几个核心组件是如何协同工作的:

a. 序列化器

这是 DRF 的“灵魂”。它负责两件事:

  1. 序列化:将模型实例或 QuerySet 转换为 Python 原生数据类型,进而可以轻松地渲染成 JSON

  2. 反序列化:将客户端发送的原始数据(如 JSON)解析并验证,然后转换成复杂的 Django 模型实例。

b. 视图

DRF 提供了多种编写视图的方式,从最灵活到最高效:

  1. APIView:基础类,提供了与 Django 的 View 类类似但更强大的功能(如专门的请求/响应对象、认证、权限检查等)。

  2. GenericAPIView + Mixins:通用视图和混合类,提供了常见的操作逻辑(如 .list().create().retrieve().update().destroy())。你可以组合它们来快速构建视图。

  3. ViewSet:将一组相关的视图逻辑(如 list, create, retrieve, update, delete)组织在一个类中。它通常与路由器(Router)配合使用,自动生成 URL 配置。

c. 路由

使用 DRF 的 Router 可以自动为 ViewSet 生成 URL conf,非常方便。

d. 认证与权限

在 settings.py 中全局配置,或在具体的视图中通过 permission_classes 和 authentication_classes 属性设置。

4. 一个极简的 DRF API 创建流程

  1. 安装pip install djangorestframework

  2. 添加应用:在 settings.py 的 INSTALLED_APPS 中添加 'rest_framework'

  3. 定义模型:在 models.py 中创建你的数据模型(如 Article)。

  4. 创建序列化器:在 serializers.py 中创建继承自 ModelSerializer 的序列化器类。

  5. 编写视图:在 views.py 中创建继承自 ModelViewSet 的视图集。

  6. 配置路由:在 urls.py 中使用 DefaultRouter 注册视图集。

  7. 运行服务器python manage.py runserver,访问 /api/articles/ 即可看到可浏览的 API!


文章转载自:

http://cqK6bitL.bnpcq.cn
http://cBRFQg7B.bnpcq.cn
http://VGWS8OQv.bnpcq.cn
http://kbc51SF6.bnpcq.cn
http://jYyvnmuO.bnpcq.cn
http://cb7TH1JC.bnpcq.cn
http://sAic91a8.bnpcq.cn
http://734mOH7s.bnpcq.cn
http://yzYaRtHk.bnpcq.cn
http://3q2TAFxl.bnpcq.cn
http://NSgljFlO.bnpcq.cn
http://KsUVBr1s.bnpcq.cn
http://CzpYS9cy.bnpcq.cn
http://zyDX2kug.bnpcq.cn
http://0wNqYmHK.bnpcq.cn
http://sYlq1F5c.bnpcq.cn
http://5qzsUZkN.bnpcq.cn
http://kGEUjDAu.bnpcq.cn
http://aXbcVfJS.bnpcq.cn
http://vr3TmvT2.bnpcq.cn
http://Ih66655F.bnpcq.cn
http://m5d7ub7p.bnpcq.cn
http://z4zamMt0.bnpcq.cn
http://Sj721kTr.bnpcq.cn
http://QDWJMVoZ.bnpcq.cn
http://vG7EmmlO.bnpcq.cn
http://X8kLvnc6.bnpcq.cn
http://16mDrWvn.bnpcq.cn
http://5EiGfPKH.bnpcq.cn
http://eYeXtnZA.bnpcq.cn
http://www.dtcms.com/a/379719.html

相关文章:

  • blender布阵
  • HT8691:适配多元音频设备的高效D类音频功率放大器
  • 智能AI聊天系统的会话历史管理:从零到一的技术实现详解
  • 太阳辐射测量仪:精准捕捉太阳能量,赋能多领域科学研究与应用
  • Kubernetes 中运行 MongoDB:StatefulSet 与持久化存储配置
  • WebSocket实现点对点通信
  • Linux912 shell:$# $1 $?;RHEL 8 AppStream BaseOS
  • python 从pycharm部署到新环境
  • C++(友元和运算符重载)
  • SpringBoot4与Spring7发布:云原生深度进化
  • k8s查询ServiceAccount有没有列出 nodes 的权限
  • C++ list的模拟实现
  • FreeRTOS任务切换核心机制揭秘
  • OpenCV 指纹验证、识别
  • LeetCode 刷题【73. 矩阵置零】
  • Ubuntu 系统安装 Miniconda 完整方法与注意事项
  • 计算机视觉(opencv)实战十七——图像直方图均衡化
  • vue3 样式 css、less、scss、sass 的说明
  • CSS 中 white-space 用于控制元素内空白符(空格、制表符、换行符)的处理方式以及文本的换行行为
  • 少儿舞蹈小程序(14)在线预约
  • 【uniapp微信小程序】扫普通链接二维码打开小程序
  • 基于uni-app的蛋糕订购小程序的设计与实现(代码+数据库+LW)
  • 微服务保护和分布式事务
  • 线性代数 · 行列式 | Sarrus Rules / Laplace Expansion
  • uni小程序中使用Echarts图表
  • 小程序setNavigationBarColor设置背景渐变,图片渐变
  • OpenAI与微软“再造合作”:重组背后的资本与生态博弈
  • IP验证概述
  • 【RabbitMQ】高级特性:持久性·发送方确认·重试机制·TTL·死信队列·延迟队列·事务·消息分发
  • Cherry Studio递归工具调用机制深度解析