IT评测·应用市场-qidao123.com
标题:
Django REST Framework(十二)视图集-GenericViewSet
[打印本页]
作者:
钜形不锈钢水箱
时间:
2024-7-26 04:53
标题:
Django REST Framework(十二)视图集-GenericViewSet
GenericViewSet
是 Django REST Framework 中的一个类,它联合了 GenericAPIView 和 ViewSetMixin 的功能。它的主要目的是简化视图代码,通过将独特的代码作为类属性进行抽象,使代码更加可复用
直接使用 ViewSet 的未便之处
直接使用 ViewSet 时,像 list、retrieve、create、update 和 destroy 这样的方法都必要手动编写。而这些方法与 Mixin 扩展类提供的方法同名,因此我们可以通过继承相应的 Mixin 扩展类来复用这些方法。然而,Mixin 扩展类依赖于 GenericAPIView,以是我们还必要继承 GenericAPIView。
GenericViewSet
通过继承 GenericAPIView 和 ViewSetMixin,资助我们完成了这样的继承工作,使我们可以直接搭配 Mixin 扩展类使用,而无需手动编写这些方法。
示例
下面是如何使用 GenericViewSet 的示例:
from rest_framework.viewsets import GenericViewSet
class BookView(GenericViewSet):
def list(self, request):
books = Book.objects.all()
bs = BookSerializer(instance=books, many=True)
return Response(bs.data)
def create(self, request):
bs = BookSerializer(data=request.data)
if bs.is_valid():
bs.save()
return Response(bs.data)
else:
return Response(bs.errors)
def retrieve(self, request, pk):
book = Book.objects.get(pk=pk)
bs = BookSerializer(instance=book)
return Response(bs.data)
def update(self, request, pk):
instance = Book.objects.get(pk=pk)
bs = BookSerializer(instance=instance, data=request.data)
if bs.is_valid():
bs.save()
return Response(bs.data)
else:
return Response(bs.errors)
def delete(self, request, pk):
Book.objects.get(pk=pk).delete()
return Response(status=status.HTTP_204_NO_CONTENT)
复制代码
urls :
from django.urls import path, re_path
from vset.views import BookView
urlpatterns = [
# path("set", views.BookView.as_view({"http请求":"视图方法"})),
path("books/", BookView.as_view({
"get": "list",
"post": "create"
})),
re_path("^books/(?P<pk>\d+)$", BookView.as_view({
"get": "retrieve",
"put": "update",
"delete": "delete",
})),
]
复制代码
集合我们上面学习的模型扩展类,实现简写操作,视图,代码:
from rest_framework.viewsets import GenericViewSet
from rest_framework.mixins import ListModelMixin, CreateModelMixin, RetrieveModelMixin, UpdateModelMixin, \
DestroyModelMixin
class BookView(GenericViewSet, ListModelMixin, CreateModelMixin, RetrieveModelMixin, UpdateModelMixin,
DestroyModelMixin):
queryset = Book.objects
serializer_class = BookSerializer
复制代码
这种设置允许你在不手动编写每个方法的情况下,定义 CRUD 操作,充分利用 Mixin 扩展类和 GenericViewSet 的功能。
详细解释
GenericViewSet
继承自 GenericAPIView 和 ViewSetMixin,并且可以与各种 Mixin 扩展类一起使用,如 ListModelMixin、CreateModelMixin、RetrieveModelMixin、UpdateModelMixin 和 DestroyModelMixin。
queryset
属性定义了视图集将使用的查询集。在这个示例中,BookView 将使用 Book 模型的全部对象。
serializer_class
属性定义了视图集将使用的序列化器类。在这个示例中,BookView 将使用 BookSerializer。
list 方法
返回全部图书的列表。
create 方法
创建一本新图书。
retrieve 方法
返回指定 ID 的图书。
update 方法
更新指定 ID 的图书。
delete 方法
删除指定 ID 的图书。
通过上述设置,使用 GenericViewSet 可以极大地简化视图的编写过程,制止重复代码,并提高代码的可维护性
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4