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之js模板插件artTemplate的使用

    安装:   方式1:artTemplate模板源码下载地址:https://aui.github.io/art-template/zh-cn/index.html   方式2:使用node.js进行安装:npm install art-template –save -dev 文档:   artTemplate 中文API文档地址:https://aui.g…

    Django 2023年4月13日
    00
  • 利用django创建一个投票网站(五)

    这一篇从第四部分(en)结尾的地方继续讲起。我们在前几章成功的构建了一个在线投票应用,在这一部分里我们将其创建一些自动化测试。 自动化测试简介 自动化测试是什么? 测试,是用来检查代码正确性的一些简单的程序。 测试在不同的层次中都存在。有些测试只关注某个很小的细节(某个模型的某个方法的返回值是否满足预期?),而另一些测试可能检查对莫个软件的一系列操作(某一用…

    Django 2023年4月13日
    00
  • django基础知识之URLconf:

    在settings.py文件中通过ROOT_URLCONF指定根级url的配置 urlpatterns是一个url()实例的列表 一个url()对象包括: 正则表达式 视图函数 名称name 编写URLconf的注意: 若要从url中捕获一个值,需要在它周围设置一对圆括号 不需要添加一个前导的反斜杠,如应该写作’test/’,而不应该写作’/test/’ 每…

    Django 2023年4月13日
    00
  • django框架之drf:04、序列化器常用字段及参数,序列化器高级用法之source、定制字段数据的两种方法、多表关联反序列化的保存、ModelSerializer的使用

    Django框架之drf 目录 Django框架之drf 一、序列化器常用字段及参数 1、常用字段 2、常用字段参数 3、字段参数针对性分类 二、序列化器高级用法之source 1、定制字段名 三、定制字段数据的两种的方法 1、在序列化器类中定制 2、在模型表中定制 四、多表关联反序列化保存 1、新增接口 2、修改接口 五、反序列化字段校验(总结) 六、Mo…

    2023年4月10日
    00
  • django基础知识之GET属性:

    QueryDict类型的对象 包含get请求方式的所有参数 与url请求地址中的参数对应,位于?后面 参数的格式是键值对,如key1=value1 多个参数之间,使用&连接,如key1=value1&key2=value2 键是开发人员定下来的,值是可变的 示例如下 创建视图getTest1用于定义链接,getTest2用于接收一键一值,ge…

    Django 2023年4月12日
    00
  • 使用Django开发简单接口实现文章增删改查

    下面我将详细讲解使用Django开发简单接口实现文章增删改查的完整攻略。 简介 Django是一个基于MVC架构的Web开发框架,提供了一整套用于快速开发高质量Web应用程序所需的组件和工具。在Django中,我们可以使用ORM(Object Relational Mapping)来操作数据库,从而方便地对数据库进行增删改查操作。 开发环境要求 Python…

    Django 2023年5月16日
    00
  • uwsgi运行django应用是报错no app loaded. going in full dynamic mode

    今天测试uwsgi运行uwsgi.ini的时候,报错: 网上搜了一天,大都不知原因,还是google吧:github问题解决 说说问题原因吧:根据uwsgi的提示,应该是wsgi.py的application导入问题导致,根据报错,可以尝试用python 导入试试 python -c “from app.wsgi import application” 显然…

    Django 2023年4月13日
    00
  • Linux部署Django:报错 nohup: ignoring input and appending output to ‘nohup.out’

    一、部署 Django 到远程 Linux 服务器 利用 xshell 通过 ssh 连接到 Linux服务器,常规的启动命令是 python3 manage.py runserver 0.0.0.0:80 但是,关闭 xshell 后,就访问不了 Django 了。 这时候需要使用 nohup 命令启动(概念:如果你正在运行一个进程,而且你觉得在退出帐户时…

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