27 视图集
视图集
'''
视图集
特点:
1,可以将一组相关的操作,放在一个类中进行完成
2,不提供获取,发布方法,使用检索,创建方法来替代
3,可以将标准的请求方式(获取、发布、放置、删除),和混合中的方法做映射
常见的视图集:
类名称父类作用
视图集APIView可以做路由映射
ViewSetMixin
泛型视图集泛型视图可以做路由映射,可以使用三个属性,三个方法
ViewSetMixin
模型视图集泛型视图所有的增删改查功能,可以使用三个属性,三个方法
5个混合类
?
ReadOnlyModelViewSet泛型数据透视图获取单个,所有数据,可以使用三个属性,三个方法
检索模型混合
ListModelMixin
?
'''
路由映射是由ViewSetMixin
viewSet
view
来自。模型导入BookInfo
从姜戈。快捷键导入get_object_or_404
来自。序列化程序导入图书分类器
从休息框架导入视图集
来自rest_framework.response导入响应
?
类BookViewSet(视图集。视图集):
'''
用于列出或检索用户的简单视图集。
'''
极好的列表(自我,请求):
queryset=BookInfo.objects.all()
序列化程序=BookInfoSerializer(queryset,multi=True)
返回响应(序列化程序。数据)
?
极好的检索(自身,请求,主键=无):
queryset=BookInfo.objects.all()
# 从数据库对象中获取pk=pk的如果正确返回不正确则404
book=get _ object _ or _ 404(查询集,pk=pk)
序列化程序=图书分类程序(图书)
返回响应(序列化程序。数据)
urls
从django.urls导入路径,包括
来自。导入视图
?
urlpatterns=[
.
# 视图集
路径(“视图集/”,视图bookviewset。as _ view({ ' get ' : ' list ' }),
路径(' viewSet/int:pk ',视图bookviewset。as _ view({ ' get ' : ' retrieve ' })
]
ReadOnlyModelViewSet
view
f
rom rest_framework import viewsets
class BookInfoReadOnlyViewSet(viewsets.ReadOnlyModelViewSet):
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializer
urls
# readonlymodelViewSet
path('ReadOnly_viewSet/',views.BookInfoReadOnlyViewSet.as_view({'get':'list'})),
path('ReadOnly_viewSet/int:pk', views.BookInfoReadOnlyViewSet.as_view({'get': 'retrieve'})),
ModelViewSet
view
from rest_framework.viewsets import ModelViewSet
class BookInfoModelViewSet(ModelViewSet):
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializer
urls
path('model_viewSet/',views.BookInfoModelViewSet.as_view({'get':'list', 'post':'create'})),
path('model_viewSet/int:pk',
views.BookInfoModelViewSet.as_view({'get':
'retrieve','put':'update','delete':'destroy'}))
视图集额外动作
获取阅读量大于20的
views
from rest_framework.viewsets import ModelViewSet
from .serializers import BookInfoSerializers
from .models import BookInfo
from rest_framework.response import Response
?
class BookInfoViewSet(ModelViewSet):
serializer_class = BookInfoSerializers
queryset = BookInfo.objects.all()
?
def read_book(self,request):
books = BookInfo.objects.filter(bread__gt=30)
?
serializer = BookInfoSerializers(instance=books,many=True)
?
return Response(serializer.data,status=201)
urls
from django.urls import path,include
from . import views
?
urlpatterns=[
path('book/',
views.BookInfoViewSet.as_view({'get':'list','post':'create'})),
path('book/int:pk',
views.BookInfoViewSet.as_view({'get': 'retrieve', 'put': 'update','delete':'destroy'})),
]
修改指定id的阅读量
views
......
?
class BookInfoViewSet(ModelViewSet):
......
# 修改指定书籍
def updata_book_read(self,request,pk):
book = self.get_object()
data = request.data
serializer =
self.get_serializer(instance=book,data=data,partial=True)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response(serializer.data,status=200)
url
.......
?
urlpatterns=[
......
path('book/readbook/',
views.BookInfoViewSet.as_view({'get': 'read_book'})),
path('book/readbook/int:pk',
views.BookInfoViewSet.as_view({'put': 'updata_book_read'})),
]
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/67483.html