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 中,我们需要定义视图集并将其绑定到一个 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 与 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 的示例代码:
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_视图和路由详解相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!