Login
网站首页 > 文章中心 > 其它

Django_REST_framework_视图和路由详解

作者:小编 更新时间:2023-10-11 07:55:52 浏览量:124人看过

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

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

视图

基于类的视图

基于类的视图通过继承 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!")


通用视图

在 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,但是包括一个自动生成的根视图;

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 链接.

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 链接.

结论

以上就是土嘎嘎小编为大家整理的Django_REST_framework_视图和路由详解相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章