drf ViewSetMixin与GenericViewSet

关系

from rest_framework.generics import GenericAPIView
from rest_framework.viewsets import ViewSetMixin, GenericViewSet

ViewSetMixin+GenericAPIView = GenericViewSet

路由

    # 列表的 'get':'list'
    # 单个的 'get':'retrieve','post':'create','put':'update','delete':'destroy'
urlpatterns = [
    path('blog/', blogViews.BlogView.as_view({'get': 'list', 'post': 'create'}), name='blog'),
    path('blog/<int:pk>/', blogViews.BlogView.as_view({'get': 'retrieve'}), name='blog_detail'),
]

view

class BlogView(GenericViewSet):
    queryset = models.Blog.objects.order_by('-id').all()
    serializer_class = BlogModelSerializer
    pagination_class = MyPageNumberPagination
    """
    list:
    返回所有blog
    create:
    添加博客
    retrieve:
    返回单个blog
    """
    authentication_classes = [ParamsAuthentication, ]

    def list(self, request, *args, **kwargs):
        queryset = self.get_queryset()
        result = self.paginate_queryset(queryset)
        ser = self.get_serializer(instance=result, many=True)
        response = self.get_paginated_response(ser.data)
        return response

    def create(self, request):
        if not request.user or not request.auth:
            res_code.res_error(msg='需要登录后操作')
            return Response(res_code.dict)
        json_data = request.data
        ser = self.get_serializer(data=json_data)
        if not ser.is_valid():
            res_code.res_error(msg='校验失败', data=ser.errors)
            return Response(res_code.dict)
        ser.save(creator=request.user)
        res_code.res_success(data=ser.data, msg='新增成功')
        return Response(res_code.dict)

    def retrieve(self, request, *args, **kwargs):
        queryset = self.get_object()
        ser = self.get_serializer(instance=queryset)
        res_code.res_success(ser.data)
        return Response(res_code.dict)

结果

image

posted @ 2022-10-10 17:27  Sherwin_szw  阅读(31)  评论(0)    收藏  举报