使用Django Rest Framework构建API

        Django Rest Framework (DRF) 是一个强大且灵活的工具集,用以构建Web API。它基于Django,一个非常流行的Python Web框架。在本文中,我们将深入探讨如何使用DRF来构建一个高效、结构化的API。


目录

使用Django Rest Framework构建API

一、环境设置和项目创建

1. Python和Django的安装

2. Django和DRF的安装

3. 创建新的Django项目

4. 添加应用

5. 虚拟环境与依赖管理

二、序列化数据

1. 理解序列化和反序列化

2. 创建序列化器

3. 序列化器的高级用法

三、视图和路由

1. 创建API视图

2. 配置路由

3. 高级路由配置

四、安全性和权限

1. 全局设置认证和权限

2. 细节级别安全设置

五、测试和文档

1. 单元测试

2. 集成测试和验收测试

3. 文档生成

六、总结


使用Django Rest Framework构建API

 

一、环境设置和项目创建

        在开始之前,确保您已经安装了Python和Django的环境。Python和Django是开发任何Django项目的基石,因此,确认安装是初步且关键的步骤。安装Python通常是直接的,但确保您正在使用支持的版本(至少是Python 3.6及以上版本)。

1. Python和Django的安装

  • 下载并安装Python: 访问Python官方网站,下载适合您操作系统的Python版本,并执行安装程序。(Welcome to Python.org)
  • 设置Python环境变量: 确保Python可执行文件的路径被添加到系统的环境变量中,这使得您可以在命令行中全局访问Python命令。
  • 验证Python安装: 在命令行中输入pythonpython3,您应该看到Python的交互式 shell。

2. Django和DRF的安装

  • 安装Django: Django可以通过Python的包管理工具pip进行安装。在命令行中运行pip install django应该足够安装Django框架。
  • pip install djangorestframework
    
  • 检查Django安装: 通过创建一个新的Django项目来测试安装是否成功。在命令行中输入django-admin startproject testproject,然后进入该项目目录,运行python manage.py runserver。如果在浏览器中访问http://localhost:8000能看到默认的Django欢迎页面,则表明Django已正确安装。
  • 安装Django Rest Framework: 同样使用pip工具,执行pip install djangorestframework。这将安装所有必要的包以运行DRF。
  • 简单验证DRF安装: 为了验证DRF也已正确安装,可以尝试在项目中创建一个简单的路由来查看是否能够正常运行。

3. 创建新的Django项目

  • 使用django-admin工具: django-admin是Django自带的命令行工具,可以方便地创建和管理Django项目。
  • 设定项目名称和目录: 在创建项目时,您应该思考合适的项目名,这将是您的顶级应用名称。
  • 项目结构: Django创建的项目会有基本的目录结构,包括根目录下的manage.py, 核心配置在settings.py以及应用特定的设置在urls.py
  • django-admin startproject myproject
    

4. 添加应用

  • 理解Django的应用模型: 在Django中,每个功能模块通常由一个应用表示。每个应用都有自己的模型、视图、模板等。
  • 创建API应用: 对于本教程,我们创建一个叫做api的新应用,它将承载我们的Web API。
  • 组织代码: 合理组织您的代码将有助于后续维护和扩展。考虑将模型、视图和路由分成不同的文件,以便管理。

5. 虚拟环境与依赖管理

  • 使用虚拟环境: 强烈建议使用虚拟环境包裹您的项目依赖,避免不同项目间的依赖混乱。
  • pipenv或virtualenv: 选择其中之一作为您的虚拟环境管理器。两者都可以有效地创建隔离的Python环境。
  • requirements.txt: 随着项目的进展,您会添加更多的包。使用pip freeze > requirements.txt来保存您的包及其版本到一个文件中。这有助于项目的部署和团队协作。

二、序列化数据

        在Django Rest Framework中,序列化数据是核心概念之一。序列化器是DRF中一个强大的工具,它转换复杂的数据类型为易于Web API消费的格式,如JSON。反之,它也处理从请求数据中解析用户发送的数据到Python对象的过程。这个双向的数据处理机制使得数据库内容可以容易地被任何客户端使用。

1. 理解序列化和反序列化

  • 序列化: 是将模型实例转换为可以被存储或传输的格式(通常是JSON,XML等)的过程。这对于API响应非常有用,因为它允许服务器发送可以被多种类型的客户端轻松解析的标准化数据。
  • 反序列化: 是将已存储或传输的格式转换回模型实例的过程。当API接收数据时经常用到,比如在创建或更新数据库记录时。

2. 创建序列化器

        DRF通过serializers.py文件来管理序列化器。在这个文件中,您可以定义如何将模型转换为可序列化的格式,以及反之。

from rest_framework import serializers
from .models import YourModelclass YourModelSerializer(serializers.ModelSerializer):class Meta:model = YourModelfields = ['field1', 'field2']
  • 定义模型序列化器: 每个模型通常都有一个相应的序列化器类。例如,对于YourModel,您会创建一个YourModelSerializer
  • 字段覆盖和自定义: 您可以在序列化器中添加、删除或修改模型的字段。这包括指定字段类型、验证方法以及如何从数据库表示转换到序列化表示。
  • 嵌套和复杂的数据关系: DRF支持复杂的数据关系,如多表关系和反向关系。您可以使用StringRelatedFieldSlugRelatedFieldHyperlinkedRelatedField等字段来表示这些关系。

3. 序列化器的高级用法

  • 细节路由和超链接: 在序列化器中,您可以使用HyperlinkedModelSerializer来自动为模型实例生成超链接。这对于HATEOAS(Hypermedia as the engine of application state)风格的API非常实用。
  • 自定义字段和验证: 如果您需要对某个字段进行特定的验证或者处理,可以在序列化器中定义validate_<fieldname>方法。这给了您很大的灵活性来处理如何清理和验证来自用户的输入数据。
  • 多个表示形式: 有时您可能需要一个模型的多个序列化表示形式。在这种情况下,您可以为同一模型创建多个序列化器,并在视图中指定使用哪一个。

        通过灵活地使用序列化器,您可以精确控制数据的显示和提交方式。这是构建强大且安全Web API的关键步骤。现在我们已经了解了如何通过序列化器处理数据,接下来我们会深入到如何使用视图和路由来处理API的请求和响应。这将为我们提供一个完全功能的Web API,能够处理各种HTTP方法,如GET、POST、PUT和DELETE。

三、视图和路由

        在Django Rest Framework (DRF) 中,视图和路由紧密合作,用以处理传入的请求并返回相应的响应。视图是处理请求的逻辑部分,而路由则定义了这些视图如何与URLs关联。

1. 创建API视图

        DRF中的视图用于处理传入的请求并返回响应。您可以使用通用视图来简化开发流程。

  • 使用通用视图: DRF提供了一系列的通用视图,例如retrievelistcreateupdatepartial_update, 和 destroy。这些视图封装了API开发中的常见模式。
  • 自定义视图继承: 如果您的需求超出了通用视图提供的功能,您可以通过继承这些视图并重写其方法来自定义视图。例如,您可以重写get_queryset方法来自定义返回的数据。
from rest_framework import generics
from .models import YourModel
from .serializers import YourModelSerializerclass YourModelListCreateView(generics.ListCreateAPIView):queryset = YourModel.objects.all()serializer_class = YourModelSerializer

2. 配置路由

        路由的作用是将URL模式映射到相应的视图上。在DRF中,通常使用urls.py文件来配置这些路由。

  • 使用pathregister 在您的应用的urls.py文件中,使用path函数来定义哪些URL对应您的视图。如果使用路由器(如DefaultRouter),您还可以自动地为你的模型生成一套标准的API路由。
  • 自定义路由和视图绑定: 对于复杂的路由,您可以直接在urls.py中使用path精确控制URL结构,并将它们绑定到您的视图类上。
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import YourModelListCreateViewrouter = DefaultRouter()
router.register(r'yourmodel', YourModelListCreateView, basename='yourmodel')urlpatterns = [path('', include(router.urls)),
]

3. 高级路由配置

  • 使用视图集: 视图集(ViewSets)允许您仅需定义一次视图逻辑,然后将其用在不同的路由上。这对于减少代码重复和维护大型API非常有用。
  • 复杂路由关系: 在某些情况下,您可能需要定义更复杂的路由关系。DRF支持使用第三方包如django-rest-framework-nested来处理嵌套的资源路由。

        通过定义细致的视图和灵活的路由,您可以精确控制API的行为和URL结构。这不仅提高了API的可维护性,也增强了用户体验。接下来,我们将讨论如何通过安全性和权限来保护您的API,确保数据的安全访问和操作。

四、安全性和权限

        保护您的API免受未经授权的访问是非常重要的。

1. 全局设置认证和权限

        您可以在settings文件中为整个API配置默认的认证和权限策略。

REST_FRAMEWORK = {'DEFAULT_AUTHENTICATION_CLASSES': ['rest_framework.authentication.BasicAuthentication','rest_framework.authentication.SessionAuthentication',],'DEFAULT_PERMISSION_CLASSES': ['rest_framework.permissions.IsAuthenticated',],
}

2. 细节级别安全设置

        对于更细粒度的控制,您可以在视图级别上设置认证和权限。

class YourModelListCreateView(generics.ListCreateAPIView):authentication_classes = [SessionAuthentication, BasicAuthentication]permission_classes = [IsAdminUser, ]

五、测试和文档

        在开发任何应用程序,特别是Web API时,确保您的代码按预期工作是至关重要的。同时,一个好的API需要配备详细的文档,帮助开发者理解和使用接口。Django Rest Framework (DRF) 提供了工具和机制来帮助您轻松进行测试和生成文档。

1. 单元测试

单元测试是检查代码各个单元是否正常工作的过程。DRF提供了APITestCase类,它是Django的TestCase类的子类,专门用于API的测试。

  • 编写测试用例: 您应该为每个视图或视图集编写测试用例,确保它们正确处理请求和返回预期的响应。
  • 模拟请求与断言结果: 使用APIClient来发送模拟的HTTP请求到您的视图,并使用断言来验证响应数据。
from rest_framework.test import APITestCase
from rest_framework.status import HTTP_200_OK
from .models import YourModelclass YourModelApiTests(APITestCase):def test_create_yourmodel(self):url = reverse('yourmodel-list-create')response = self.client.post(url, {'field1': 'value1', 'field2': 'value2'}, format='json')self.assertEqual(response.status_code, HTTP_200_OK)

2. 集成测试和验收测试

  • 集成测试: 集成测试用来确保不同的部分(如模型、视图和路由)能够一起正常工作。这通常涉及测试整个API的交互。
  • 验收测试: 验收测试从用户的角度出发,确保系统符合业务需求。这包括测试API的端到端功能,确保它在实际使用中表现正常。

3. 文档生成

良好的文档对于任何API都是关键,DRF通过其自动文档生成工具使得创建文档变得简单。

  • 使用docstrings: 在您的代码中充分利用Python的docstrings来描述视图、序列化器和模型的功能。
  • 自动文档生成: DRF可以自动从您的API中提取信息,生成可读的文档页面。只需几行设置,即可激活此功能。
from rest_framework.documentation import include_docs_urlsurlpatterns += [path('docs/', include_docs_urls(title='My API title')),
]

六、总结

        在本指南中,我们深入探讨了使用Django Rest Framework (DRF) 构建Web API的五个关键步骤:环境设置、数据序列化、视图与路由配置、安全性和权限设置、以及测试和文档生成。每一步都是构建强大、安全且易于维护的API的关键组成部分。

  • 环境设置 确保了您的项目有正确的基础架构。
  • 数据序列化 是处理数据输入输出的核心,关系到数据的标准化和国际化。
  • 视图与路由配置 定义了API的行为和URL结构,直接影响到API的用户友好度和可扩展性。
  • 安全性和权限 保护您的API免受未授权访问,保证数据的安全和合法使用。
  • 测试和文档 保证了API的可靠性和易用性,有助于开发者更快地了解和使用API。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/49009.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SQLServer】如何设计日增几十万数据量的业务分库分表方案

随着公司的业务发展不断的壮大&#xff0c;像一些核心的业务&#xff08;如订单&#xff09;数据量会越来越大&#xff0c;此时就需要考虑分库分表方案来应对业务的发展。今天就来聊聊分库分表的一些设计方案。 1、冷热数据分离方案 在我们业务中有些数据只是最近一段时间使用…

世平基于 NXP UWB Digital-Key Kit 应用方案

大联大世平集团针对汽车数字钥匙&#xff0c;推出了基于 NXP UWB Digital-Key Kit 解决方案。此方案基于超宽带&#xff08;UWB&#xff09;技术&#xff0c;利用 UWB 技术的高精度定位和距离测量能力&#xff0c;实现了安全、便捷的数字钥匙功能。该套件主要器件有 NXP 的 UWB…

14、如何⽤DDD设计微服务代码模型

在完成领域模型设计后&#xff0c;接下来我们就可以开始微服务的设计和 落地了。在微服务落地前&#xff0c;⾸先要确定微服务的代码结构&#xff0c;也就是我 下⾯要讲的微服务代码模型。 只有建⽴了标准的微服务代码模型和代码规范后&#xff0c;我们才可以将 领域对象映射到…

AgentMD:通过大规模临床工具学习提升语言代理的风险预测能力

人工智能咨询培训老师叶梓 转载标明出处 临床计算器在医疗保健中扮演着至关重要的角色&#xff0c;它们通过提供准确的基于证据的预测来辅助临床医生进行诊断和预后评估。然而&#xff0c;由于可用性挑战、传播不畅和功能受限&#xff0c;这些工具的广泛应用常常受限。为了克服…

Django视图与URLs路由详解

在Django Web框架中&#xff0c;视图&#xff08;Views&#xff09;和URLs路由&#xff08;URL routing&#xff09;是Web应用开发的核心概念。它们共同负责将用户的请求映射到相应的Python函数&#xff0c;并返回适当的响应。本篇博客将深入探讨Django的视图和URLs路由系统&am…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十八章 Platform 设备驱动

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

java的DOS命令

目录 1.DOS命令了解 DOS介绍 常用的dos命令1 DOS的基本原理 相对路径与绝对路径 常用的dos命令2 2.本章作业 1.编写hello&#xff0c;world程序 2.输出个人基本信息 3.jdk&#xff0c;jre&#xff0c;jvm关系 4.环境变量path配置及作用 5.java编写步骤 6.java编写7…

昇思25天学习打卡营第4天 | 网络构建

在学习和实践MindSpore神经网络模型构建的过程中&#xff0c;我深刻理解了MindSpore中如何通过nn.Cell类来构建和管理复杂的神经网络模型。通过这次的实践&#xff0c;我对神经网络的基本构建和应用有了更加全面的认识&#xff0c;以下是我学习过程中所总结的几点心得&#xff…

科普文:云计算服务类型IaaS, PaaS, SaaS, BaaS, Faas说明

概叙 基本概念 IaaS, PaaS, SaaS, BaaS, 和 FaaS 是云计算服务的不同类型&#xff0c;‌它们各自提供了不同的服务层次和功能。‌ IaaS (Infrastructure as a Service基础设施即服务) 提供基础设施服务&#xff0c;‌包括服务器、‌存储、‌网络等硬件资源。‌用户可以在这些…

Linux嵌入式学习——数据结构——概念和Seqlist

数据结构 相互之间存在一种或多种特定关系的数据元素的集合。 逻辑结构 集合&#xff0c;所有数据在同一个集合中&#xff0c;关系平等。 线性&#xff0c;数据和数据之间是一对一的关系。数组就是线性表的一种。 树&#xff0c; 一对多 图&#xff0c;多对多 …

项目策划不再愁,可道云teamOS流程图助你轻松上阵

在当今这个快节奏、高协同的工作环境中&#xff0c;每一项任务的推进都离不开清晰、高效的沟通与规划。 在线流程图工具&#xff0c;作为数字时代团队协作的得力助手&#xff0c;以其直观易懂的呈现方式、灵活多变的编辑功能&#xff0c;极大地简化了复杂项目的策划与执行流程…

ip地址设置了重启又改变了怎么回事

在数字世界的浩瀚星海中&#xff0c;IP地址就如同每个设备的“身份证”&#xff0c;确保它们在网络中准确无误地定位与通信。然而&#xff0c;当我们精心为设备配置好IP地址后&#xff0c;却时常遭遇一个令人费解的现象&#xff1a;一旦设备重启&#xff0c;原本设定的IP地址竟…

5.Fabric的共识机制

在Fabric中,有以下3中典型共识机制。 Solo共识 solo共识机制只能用于单节点模式,即只能有一个Orderer节点,因此,其共识过程很简单,每接收到一个交易信息,就在共识模块的控制下产生区块并广播给节点存储到账本中。 Solo 模式下的共识只适用于一个Orderer节点,所以可以在…

C/C++ 内存管理

C/C 内存管理 1. C/C内存分布2. C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free3. C内存管理方式3.1 new/delete操作内置类型3.2 new和delete操作自定义类型 4. operator new与operator delete函数&#xff08;重要点进行讲解&#xff09;4.1 operator new与o…

【Java】:洗牌功能和杨辉三角的实现

洗牌 此操作包含的基本功能有&#xff1a; 组牌&#xff1a;组建 52 张扑克牌 四种花色&#xff1a;“♥️”&#xff0c;“♠️”&#xff0c;“⬛️”&#xff0c;“♣️”每种花色 13 张牌&#xff1a;1~13 洗牌&#xff1a;将 52 张扑克牌打乱顺序发牌&#xff1a;给三个人…

【深度学习入门篇 ⑪】自注意力机制

【&#x1f34a;易编橙&#xff1a;一个帮助编程小伙伴少走弯路的终身成长社群&#x1f34a;】 大家好&#xff0c;我是小森( &#xfe61;ˆoˆ&#xfe61; ) &#xff01; 易编橙终身成长社群创始团队嘉宾&#xff0c;橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官…

Vue3 SvgIcon组件开发

在前面自定义tree组件继续功能迭代前&#xff0c;我们先开发一个通用的ScgIcon组件&#xff0c;用于后续组件模板中小图标的展示。 引入iconfont 官网&#xff1a;https://www.iconfont.cn/ 选取图标进行下载&#xff0c;只取iconfont.js文件 在prettier中忽略该文件&#x…

【YOLOv5/v7改进系列】引入CoordConv——坐标卷积

一、导言 与标准卷积层相比&#xff0c;CoordConv 的主要区别在于它显式地考虑了位置信息。在标准卷积中&#xff0c;卷积核在输入上滑动时&#xff0c;仅关注局部区域的像素强度&#xff0c;而忽略其绝对位置。CoordConv 通过在输入特征图中添加坐标信息&#xff0c;使得卷积…

STM32CubeIDE(CAN)

目录 一、概念 1、简述 2、CAN 的几种模式 二、实践 1、环回模式轮询通信 1.1 软件配置 1.2 代码编写 2、环回模式中断通信 2.1 软件配置 2.2 代码编写 一、概念 1、简述 STM32微控制器系列包含多个型号&#xff0c;其中一些型号集成了CAN&#xff08;Controller Are…

Vuex--全局共享数据

目录 一 是什么? 二 怎么用&#xff1f; 三 注意点 一 是什么? 在此之前&#xff0c;我们使用vue的数据全部放在每个组件的data区域里面&#xff0c;这里return里面存的都是这个组件要用到的数据&#xff0c;但是这里面的数据是局部的数据&#xff0c;也就是说这些数据是这…