Django REST framework 视图和路由详解

Django REST framework(DRF)是一种基于 Django 的强大且灵活的工具,可帮助我们更轻松地为我们的 Django 应用程序创建 RESTful API。它提供了一组工具和库来帮助我们构建更有效的 Web API,并包括功能强大的序列化,认证,请求,响应和路由工具等功能。

DRF 包含了许多构建 Web API 所需的基本组件,但是我们需要学会如何将它们组合在一起使用。在使用 DRF 开发 Web API 时,其中两个最重要的概念是视图和路由,它们是 Web API 开发的基础。

视图

视图是 Django 中的一种模式,用于处理来自客户端的请求并返回响应。在 DRF 中,视图有一些额外的功能,例如身份验证(authentication)和数据序列化(serialization)。DRF 提供了多种视图类型,其中最常用的是基于类的视图。

基于类的视图

基于类的视图通过继承 DRF 中的通用视图来实现。通用视图提供了常见的视图行为,例如获取对象列表(list)、创建对象(create)、更新对象(update)、删除对象(delete)和获取单个对象(retrieve)等。我们可以根据自己的需求覆盖通用视图提供的方法,或者从中继承新的方法。

下面是一个 DRF 中的基本示例:

from rest_framework.views import APIView
from rest_framework.response import Response

class HelloView(APIView):
    def get(self, request):
        return Response("Hello, World!")

在上面的示例中,我们创建了一个名为 HelloView 的 APIView 视图。这个视图有一个 GET 方法,用来返回一个包含字符串 "Hello, World!" 的 Response 对象。

通用视图

在 DRF 中,我们还可以使用通用视图来实现相同的行为,但不需要为每个视图方法编写重复的代码。通用视图具有一些预定义的方法,用于执行各种操作,例如,获取对象列表(ListAPIView)或一个对象详情(RetrieveAPIView)等,可以使用这些预定义方法轻松地实现我们的视图。

下面是一个使用 ListAPIView 的示例代码:

from rest_framework.generics import ListAPIView
from someapp.serializers import SomeModelSerializer
from someapp.models import SomeModel

class SomeModelListView(ListAPIView):
    queryset = SomeModel.objects.all()
    serializer_class = SomeModelSerializer
    permission_classes = [AllowAny]

在上面的示例中,我们创建了一个名为 SomeModelListView 的视图,并设置了相应的属性。queryset 属性指定了查询所有某个模型中的所有实例,而 serializer_class 属性指定了该模型的序列化器,序列化器用于将查询结果转化为 JSON 格式。permission_classes 属性指定了此视图的权限,如果不设置, 将使用全局默认权限(settings.DEFAULT_PERMISSION_CLASSES)。

路由

在 Django 中,路由是用于将 URL 映射到对应的视图的机制。在 DRF 中,我们使用路由来将 URL 映射到视图集,视图集类似于 Django 中的视图,但允许我们查询和操作数据。

DRF 中,使用以下类中的一个或多个来定义路由:

  • SimpleRouter:用于定义基于视图集的标准路由;
  • DefaultRouter:类似于 SimpleRouter,但是包括一个自动生成的根视图;
  • APIRouter:DRF 3.10 版本中引入,类似于 SimpleRouter,但是在多个视图集中定义通用操作。

SimpleRouter

在 SimpleRouter 中,我们需要定义视图集并将其绑定到一个 URL。

下面是一个使用 SimpleRouter 的示例代码:

from rest_framework.routers import SimpleRouter
from someapp.views import SomeModelViewSet

router = SimpleRouter()
router.register(r'somemodels', SomeModelViewSet)

urlpatterns = router.urls

在上面的示例中,我们首先导入 SimpleRouter 并定义了一个 SomeModelViewSet 的视图集。使用 router.register() 方法将视图集绑定到 /somemodels/ 路由上,并返回该路由的 URL 链接。

如果我们访问该 URL,将调用视图集的 list() 方法来返回一个包含所有 SomeModel 对象的 JSON 数组。

DefaultRouter

DefaultRouter 与 SimpleRouter 类似,但是包括一个自动生成的根视图。

下面是一个使用 DefaultRouter 的示例代码:

from rest_framework.routers import DefaultRouter
from someapp.views import SomeModelViewSet

router = DefaultRouter()
router.register(r'somemodels', SomeModelViewSet)

urlpatterns = router.urls

在上面的示例中,我们首先导入 DefaultRouter 并定义了一个 SomeModelViewSet 的视图集。与 SimpleRouter 相同,使用 router.register() 将视图集绑定到 /somemodels/ 路由上,并返回该路由的 URL 链接。

如果我们访问该 URL,将调用视图集的 list() 方法并返回一个包含所有 SomeModel 对象的 JSON 数组。 但是,在访问 http://127.0.0.1:8000/ 时,我们将看到一个默认的 HTML 页,其中包含所有可用 API 的链接。

APIRouter

APIRouter 是 DRF 3.10 版本中引入的一种新路由类型,类似于 SimpleRouter。与 SimpleRouter 相比,APIRouter 允许创建中央点以便将模型视图绑定到同一路由上。

下面是一个使用 APIRouter 的示例代码:

from rest_framework.routers import APIRouter
from someapp.views import SomeModelViewSet

router = APIRouter()
router.register(r'somemodels', SomeModelViewSet)

urlpatterns = router.urls

在上面的示例中,我们首先导入 APIRouter 并定义一个 SomeModelViewSet 的视图集。与 SimpleRouter 和 DefaultRouter 相同,使用 router.register() 方法将视图集绑定到 /somemodels/ 路由上,并返回该路由的 URL 链接。

结论

在使用 DRF 构建 Web API 时,视图和路由是必不可少的组件。视图是客户端用来向 API 发送请求的组件,路由是用来将 URL 映射到方法的组件。掌握这两个组件并学会如何正确使用它们,可以让我们轻松构建高效,可扩展和易于维护的 Web API。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django REST framework 视图和路由详解 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Django 如何实现文件上传下载

    下面是关于Django如何实现文件上传下载的完整攻略及两条示例说明。 文件上传 1. 在模型中定义文件类型的字段 Django模型中有一个文件类型的字段(FileField),可以定义文件上传的位置以及文件存储在服务器上的名称。 示例: from django.db import models class NewFile(models.Model): tit…

    Django 2023年5月16日
    00
  • 【服务后端】Django对比查询结果中的id时报错’dict’ object has no attribute ‘id’

    lUsers从User表中获取出来,与lUser.id进行对比   报错 AttributeError at /ClassUser/ ‘dict’ object has no attribute ‘id’   查看User变量,已经序列化处理 user {‘City’: u’\u77f3\u5bb6\u5e84′, ‘CreateTime’: datetim…

    Django 2023年4月13日
    00
  • python框架django基础指南

    下面将详细讲解关于“Python框架Django基础指南”的完整攻略及示例说明。 Python框架Django基础指南 简介 Django是一款使用Python编写的高级Web框架,采用了MVC模式(即Model-View-Controller模式),旨在帮助开发方便快捷地创建复杂、动态的Web应用程序。Django也是非常适合使用REST API构建的。 …

    Django 2023年5月16日
    00
  • Mysql 指定字段数据排序 以及django的实现

    业务场景: mysql 查询 select * from dormitory_applysettleorder order by FIELD(status,40) desc django 实现: ordering = ‘FIELD(`status`, 40)’ queryset = queryset.extra( select={‘ordering’: or…

    Django 2023年4月10日
    00
  • Django之url定义和ORM框架的使用

    前言,Django安装 pip install django # 官网安装最新版本 pip install django -i “https://pypi.doubanio.com/simple/” # 指定安装源 pip install django –upgrate # 更新Django pip uninstall django # 卸载django …

    Django 2023年4月11日
    00
  • Django模板过滤器用法详解

    Django模板过滤器是在模板中使用的一种函数式方法。它用于将模板变量转换为所需形式的输出,例如大小写,日期格式,字符串截断等操作。 在这篇文章中,我们将详细介绍Django模板过滤器的使用方法,并提供一些示例代码,以便您更好地了解这个功能。 Django模板过滤器的使用 Django模板过滤器使用“|”(竖杠)进行连接。这表示取左边的变量,将其传递到右边的…

    Django 2023年3月12日
    00
  • Django权限机制实现代码详解

    下面是对“Django权限机制实现代码详解”的完整攻略,包括两个示例说明。 一、Django权限机制的概述 Django的权限机制允许开发者对不同用户(或用户组)授予不同的权限,以实现对应用程序访问的控制。Django自带的权限系统非常强大,能够满足大多数应用场景的要求。 在Django中实现权限控制需要掌握以下几个概念: 用户(User):指使用应用程序的…

    Django 2023年5月16日
    00
  • django页面跳转问题及注意事项

    Django 页面跳转问题及注意事项 在 Django 框架中,实现页面跳转是常见的需求,如果处理不当,就会出现一些问题,本篇攻略将详细讲解 Django 页面跳转问题及注意事项。 1. 页面跳转方式 在 Django 中,实现页面跳转主要有以下两种方式: 1.1 HttpResponseRedirect HttpRedirect 是基于 HTTP 协议的一…

    Django 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部