APIView 的使用

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、付费专栏及课程。

余额充值