Django REST Framework(以下简称DRF)是基于Django框架构建的Web API框架。在DRF中,路由器(Router)是一个非常有用的工具,可以帮助我们轻松地定义API的路由,实现快速、可维护的API开发。
(资料图片)
一、路由器的作用
在DRF中,路由器的主要作用是将URL和视图函数绑定在一起。路由器可以根据视图函数的名称和参数,自动生成URL,并将请求分发到对应的视图函数中。使用路由器可以避免手动编写URL配置的繁琐和容易出错。
二、路由器的使用
安装DRF
在使用路由器之前,需要先安装DRF。可以使用pip命令安装:
pip install djangorestframework
创建路由器
创建路由器非常简单,只需要在views.py中导入DefaultRouter类,然后创建一个router实例即可:
from rest_framework import routersrouter = routers.DefaultRouter()
注册视图函数
使用路由器注册视图函数有两种方式:基于视图集(Viewsets)和基于视图(Views)。
(1)基于视图集
在DRF中,视图集是一组视图函数的集合,可以实现类似于CRUD的操作。使用视图集需要先定义一个继承自ModelViewSet或ViewSet的类,然后将这个类传递给路由器的register方法即可。
例如,下面的代码定义了一个继承自ModelViewSet的视图集类BookViewSet,然后将这个类注册到路由器中:
from rest_framework import viewsetsfrom .models import Bookfrom .serializers import BookSerializerclass BookViewSet(viewsets.ModelViewSet): queryset = Book.objects.all() serializer_class = BookSerializerrouter.register(r"books", BookViewSet)
在这个例子中,我们将BookViewSet注册到了/books的URL上。此时,路由器会自动根据BookViewSet的名称和默认的操作(list、create、retrieve、update、partial_update和destroy),生成如下的URL:
HTTP Method | URL | Action |
---|---|---|
GET | /books/ | list |
POST | /books/ | create |
GET | /books/{id}/ | retrieve |
PUT | /books/{id}/ | update |
PATCH | /books/{id}/ | partial_update |
DELETE | /books/{id}/ | destroy |
(2)基于视图
除了视图集,我们也可以使用基于视图的方式来注册视图函数。这个方法需要将视图函数包装成APIView或View的子类,然后将这个类的实例传递给路由器的register方法即可。
例如,下面的代码定义了一个继承自APIView的视图类HelloView,然后将这个类注册到路由器中:
from rest_framework.views import APIViewfrom rest_framework.response import Responseclass HelloView(APIView): def get(self, request): return Response("Hello, World!")router.register(r"hello", HelloView.as_view(), basename="hello")
在这个例子中,我们将HelloView注册到了/hello的URL上。由于HelloView继承自APIView,因此需要使用as_view方法将其转换为视图函数。
添加路由器到URLconf
注册视图函数之后,还需要将路由器添加到Django的URLconf中。这可以通过在urls.py文件中添加以下代码实现:
from django.urls import path, includeurlpatterns = [ path("", include(router.urls)),]
这个例子中,我们将路由器的URL添加到了Django的根URLconf中。这意味着我们可以通过访问/来访问我们注册的所有API。