欢迎访问宙启技术站
智能推送

REST框架视图集实现原理及用法介绍

发布时间:2023-12-15 16:51:47

REST框架视图集(Viewsets)是一种用于快速开发RESTful API的工具。它是建立在DRF(Django Rest Framework)之上的,DRF是一个流行的用于构建Web API的库。

实现原理:

REST框架视图集通过定义一组操作来对数据库模型进行增删改查等操作,然后通过URL映射将这些操作映射到相应的URL上,从而实现与前端进行数据交互。

DRF提供了两种类型的视图集:基于类的视图集和基于函数的视图集。

基于类的视图集:

可以通过继承DRF提供的ViewSet类来创建基于类的视图集。在视图集类中定义的各种方法,将会被自动映射到相应的URL,并且具有相应的请求方法。

基于函数的视图集:

通过使用DRF提供的@api_view装饰器创建基于函数的视图集。在视图集函数中,我们可以根据请求的方法来编写相应的逻辑。

用法介绍:

首先,我们需要在settings.py文件中注册我们的视图集。在INSTALLED_APPS下面加入'app'(app为我们自己的应用名称),然后在urls.py中导入我们的视图集类。

接下来,我们在views.py文件中定义一个基于类的视图集。

from rest_framework import viewsets
from .models import Book
from .serializers import BookSerializer

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

在上述代码中,我们导入了viewsets模块,并继承了ModelViewSet类。然后,我们定义了queryset属性,指定了数据的来源,以及serializer_class属性,指定了对应的序列化器。

然后,在urls.py文件中我们可以使用DefaultRouter将视图集的路由自动注册到URLconf中。

from django.urls import include, path
from rest_framework.routers import DefaultRouter
from .views import BookViewSet

router = DefaultRouter()
router.register(r'books', BookViewSet)

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

在上述代码中,我们导入了DefaultRouter模块,并将BookViewSet注册到路由中。然后,使用include函数将路由包含到urlpatterns中。

现在我们可以通过发送不同的请求(GET、POST、PUT、DELETE)到'books/'路由来对数据库中的'book'资源进行操作。

使用例子:

假设我们有一个名为Book的模型,其中包含title和author两个字段。我们希望创建一个RESTful API,用于对这个模型进行增删改查的操作。

首先,在models.py文件中定义Book模型。

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100)

    def __str__(self):
        return self.title

然后,在serializers.py文件中定义Book的序列化器。

from rest_framework import serializers
from .models import Book

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = '__all__'

接下来,在views.py文件中定义BookViewSet视图集。

from rest_framework import viewsets
from .models import Book
from .serializers import BookSerializer

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

最后,在urls.py文件中注册BookViewSet视图集。

from django.urls import include, path
from rest_framework.routers import DefaultRouter
from .views import BookViewSet

router = DefaultRouter()
router.register(r'books', BookViewSet)

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

现在,我们可以使用POST请求向'books/'路由添加一本书,使用GET请求获取书籍列表,使用GET请求获取特定书籍的详细信息,使用PUT请求更新一本书的信息,使用DELETE请求删除一本书。通过这种方式,我们就可以快速创建一个RESTful API。