viewsets.ModelViewSet作为父类时报错:ValueError: invalid literal for int() with base 10: ‘xxx‘

我在使用以viewsets.ModelViewSet 作为父类当接口的时候,当前端发起请求的时候,得到这个报错

字面意思是int()数据类型转换的错误,但是我看了接口,数据转换没有错,而且根本没有走进去接口,就报错了

如下接口:

    @detail_route(methods=["get"])
    def check_password(self, request):
        '''
        检查 密码
        '''
        
        message = {}
        # 当前登录用户
        user = request.user
        # 获取当前登录用户userinfo
        user_info = UserInfo.objects.get(owner=user)
        password = request.GET.get('password', "")
        category_id = request.GET.get('category_id', "")
        enterprise_id = self.request.GET.get('enterprise_id', None)
        if not enterprise_id:
            enterprise_id = Enterprise.objects.get(is_local=True).id
        if not password:
            return Response({'result': 'fail', 'message': "请输入密码"}, status=status.HTTP_400_BAD_REQUEST)
        cls_user_passwd = Cls_User_Passwd.objects.filter(
            category_id=category_id, user=user_info, enterprise=enterprise_id).first()
        if not cls_user_passwd:
            message['message'] = '没有权限观看此分类下的视频,赶快联系客服小姐姐吧'
            return Response(message, status=status.HTTP_403_FORBIDDEN)
        cls_user_passwd_activ_status = cls_user_passwd.activ_status
        if int(cls_user_passwd_activ_status) == 1:
            message['message'] = '当前用户已经激活此分类下的课程'
            return Response(message, status=status.HTTP_200_OK)
        else:
            course_password = cls_user_passwd.password
            if not course_password:
                return Response({'result': 'fail', 'message': "该课程不需要密码"}, status=status.HTTP_400_BAD_REQUEST)
            logger.info("s_pwd:{},type{},c_pwd{},type{}".format(course_password,
                                                                type(course_password), password, type(password)))
            if course_password == password:
                cls_user_passwd.activ_status = 1
                cls_user_passwd.save()
                return Response({"result": "success", "message": "密码正确"}, status=status.HTTP_200_OK)
        return Response({'result': 'fail', 'message': "未知错误,请联系管理员"}, status=status.HTTP_400_BAD_REQUEST)

可以看出来,我是用的是@detail_route(methods=[“get”]),也就是说是详情接口,那为啥会报数据类型转换错误呢?
原来是因为:只要是详情接口,都必须在路径前面加上一个数字类型的id,在以viewsets.ModelViewSet 为父类时,会自动检测到此id,我们可以用此id传递一些我们要用的数据,更多的数据用问好加在链接上一并传过来就好

对比两个路由的区别:
#错误的路由

# 正确的路由


正确的写法,加上pk

    @detail_route(methods=["get"])
    def check_password(self, request,pk):
        '''
        检查 密码
        '''
        message = {}
        # 当前登录用户
        user = request.user
        # 获取当前登录用户userinfo
        user_info = UserInfo.objects.get(owner=user)
        password = request.GET.get('password', None)
        category_id = pk
        enterprise_id = self.request.GET.get('enterprise_id', None)
        if not enterprise_id:
            enterprise_id = Enterprise.objects.get(is_local=True).id
        if not password:
            return Response({'result': 'fail', 'message': "请输入密码"}, status=status.HTTP_400_BAD_REQUEST)
        cls_user_passwd = Cls_User_Passwd.objects.filter(
            category_id=category_id, user=user_info, enterprise=enterprise_id).first()
        if not cls_user_passwd:
            message['message'] = '没有权限观看此分类下的视频,赶快联系客服小姐姐吧'
            return Response(message, status=status.HTTP_403_FORBIDDEN)
        cls_user_passwd_activ_status = cls_user_passwd.activ_status
        if int(cls_user_passwd_activ_status) == 1:
            message['message'] = '当前用户已经激活此分类下的课程'
            return Response(message, status=status.HTTP_200_OK)
        else:
            course_password = cls_user_passwd.password
            if not course_password:
                return Response({'result': 'fail', 'message': "该课程不需要密码"}, status=status.HTTP_400_BAD_REQUEST)
            logger.info("s_pwd:{},type{},c_pwd{},type{}".format(course_password,
                                                                type(course_password), password, type(password)))
            if course_password == password:
                cls_user_passwd.activ_status = 1
                cls_user_passwd.save()
                return Response({"result": "success", "message": "密码正确"}, status=status.HTTP_200_OK)
        return Response({'result': 'fail', 'message': "未知错误,请联系管理员"}, status=status.HTTP_400_BAD_REQUEST)

完美解决

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值