drf - APIView 实现 CBV

APIView 的使用

  • 导入 APIView from rest_framework.view import APIView

  • 自定义类,继承APIView,并提供和请求相关的方法

    class UserView(APIView):
    
        def get(self, request, *args, **kwargs):
            """
            查看所有的用户
            :param request:
            :param args:
            :param kwargs:
            :return:
            """
            serilaizer = None
            if "pk" in kwargs:
    
                queryset = User.objects.filter(pk=kwargs.get("pk")).first()
                serilaizer = UserSerializer(queryset, context={"request": request})
            else:
                queryset = User.objects.all()
                # 序列化 用户信息
                serilaizer = UserSerializer(queryset, many=True, context={"request": request})
    
            return Response(serilaizer.data, status=status.HTTP_200_OK)
    
        def post(self, request, *args, **kwargs):
            """
            新增用户
            :param request:
            :param args:
            :param kwargs:
            :return:
            """
            serialzier = UserSerializer(data=request.data)
            # 校验数据
            if serialzier.is_valid():
                serialzier.save()
                return Response(serialzier.data, status=status.HTTP_201_CREATED)
    
            return Response(serialzier.errors, status.HTTP_400_BAD_REQUEST)
    
        def put(self, request, pk, *args, **kwargs):
    
            # 1、根据主键、查询用户信息
            instance = User.objects.filter(pk=pk).first()
    
            # 2、接收页面参数
            serializer = UserSerializer(instance=instance, data=request.data, context={"request": request})
            # 3、校验页面参数
            if serializer.is_valid():
                # 4、更新数据
                serializer.save()
                return Response(serializer.data)
    
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    
        def delete(self, request, pk , *args, **kwargs):
    
            User.objects.filter(pk=pk).delete()
            return Response(status=status.HTTP_204_NO_CONTENT)
    
    
    • 定义路由 urls.py

      path('users', views.UserView.as_view(), name="user-list")
      path('users/(?P<pk>\d+$)', views.UserView.as_view(), name="user-detail")
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值