Django REST Framework-路由器(一)

2023-04-25 09:57:04 浏览数 (1)

Django REST Framework(以下简称DRF)是基于Django框架构建的Web API框架。在DRF中,路由器(Router)是一个非常有用的工具,可以帮助我们轻松地定义API的路由,实现快速、可维护的API开发。

一、路由器的作用

在DRF中,路由器的主要作用是将URL和视图函数绑定在一起。路由器可以根据视图函数的名称和参数,自动生成URL,并将请求分发到对应的视图函数中。使用路由器可以避免手动编写URL配置的繁琐和容易出错。

二、路由器的使用

安装DRF

在使用路由器之前,需要先安装DRF。可以使用pip命令安装:

代码语言:javascript复制
pip install djangorestframework

创建路由器

创建路由器非常简单,只需要在views.py中导入DefaultRouter类,然后创建一个router实例即可:

代码语言:javascript复制
from rest_framework import routers

router = routers.DefaultRouter()

注册视图函数

使用路由器注册视图函数有两种方式:基于视图集(Viewsets)和基于视图(Views)。

(1)基于视图集

在DRF中,视图集是一组视图函数的集合,可以实现类似于CRUD的操作。使用视图集需要先定义一个继承自ModelViewSet或ViewSet的类,然后将这个类传递给路由器的register方法即可。

例如,下面的代码定义了一个继承自ModelViewSet的视图集类BookViewSet,然后将这个类注册到路由器中:

代码语言:javascript复制
from rest_framework import viewsets
from .models import Book
from .serializers import BookSerializer

class BookViewSet(viewsets.ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

router.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,然后将这个类注册到路由器中:

代码语言:javascript复制
from rest_framework.views import APIView
from rest_framework.response import Response

class 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文件中添加以下代码实现:

代码语言:javascript复制
from django.urls import path, include

urlpatterns = [
    path('', include(router.urls)),
]

这个例子中,我们将路由器的URL添加到了Django的根URLconf中。这意味着我们可以通过访问/来访问我们注册的所有API。

0 人点赞