REST框架视图集实现原理及用法介绍
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。
