2022-10-10 17:27阅读: 23评论: 0推荐: 0

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

本文作者:Sherwin

本文链接:https://www.cnblogs.com/sherwin1995/p/16776515.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Sherwin_szw  阅读(23)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.