Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取api-400未能加载资源_Javascript_Ajax_Django Rest Framework_Fetch - Fatal编程技术网

Javascript 获取api-400未能加载资源

Javascript 获取api-400未能加载资源,javascript,ajax,django-rest-framework,fetch,Javascript,Ajax,Django Rest Framework,Fetch,在向我的RESTAPI发出PUT请求时,它会向客户端返回一个带有400个错误请求的序列化响应负载 {'vote': [ErrorDetail(string='Duplicate vote not allowed', code='vote_error')]} (Pdb) c Bad Request: /api/v1/questions/3/ [15/May/2021 09:41:24] "PUT /api/v1/questions/3/ HTTP/1.1" 400 39 但是

在向我的RESTAPI发出PUT请求时,它会向客户端返回一个带有400个错误请求的序列化响应负载

{'vote': [ErrorDetail(string='Duplicate vote not allowed', code='vote_error')]}
(Pdb) c
Bad Request: /api/v1/questions/3/
[15/May/2021 09:41:24] "PUT /api/v1/questions/3/ HTTP/1.1" 400 39
但是,当浏览器返回响应时,它会返回:

加载资源失败:服务器在收到上述响应负载的同时以400(错误请求)的状态响应。
?当此错误成功命中API时引发此错误的原因是什么?如何处理此错误


您已经在服务中设置了一个
ValidationError
,以避免用户执行重复投票。因此,如果被触发,您的API将返回一个
400
错误和自定义错误消息


在前端,
fetch
将接收此错误以及相关的有效负载。您需要做的是使用
捕获处理此错误(然后使用
处理成功)。签出

这是一个验证错误。您可能对“投票”字段施加了唯一的约束,并且您正在发送重复的数据。错误不在您发布的代码中。请参阅APIView及其序列化程序。不确定问题是什么,API返回所需的响应。验证错误在VoteSerializer-validate_vote()中提出。您发送的“投票”值与数据库中已有的值相同。如果您收到错误代码为400的验证错误,我看不出您是如何得到所需的响应的……我正在试图绕过用户滥用投票功能。防止用户在同一方向上连续多次向上/向下投票某个主题。这就是提高ValidationError的意图,如果发生了,我会认为这是一个糟糕的请求。换言之,不允许连续进行3次向下/向上投票。你建议如何处理这个案件?
> c:\users\..\questions\views.py(266)put()->None
-> if serializer.is_valid(raise_exception=True):
n
(Pdb) rest_framework.exceptions.ValidationError: {'vote': [ErrorDetail(string='Duplicate vote not allowed', code='vote_error')]}
> c:\users\..\views.py(506)dispatch()
-> response = handler(request, *args, **kwargs)
class UserQuestionVoteView(APIView):

    throttle_scope = "voting"

    def put(self, request, id):
        import pdb; pdb.set_trace()
        account = UserAccount.objects.get(user=request.user)
        question = get_object_or_404(Question, id=id)
        if account == question.user_account:
            return Response(data={
                'vote': "Cannot vote on your own question"
            }, status=400)
        try:
            stored_vote = QuestionVote.objects.get(
                account=account, question=question
            )
            serializer = QuestionVoteSerializer(stored_vote, request.data)
        except QuestionVote.DoesNotExist:
            serializer = QuestionVoteSerializer(data=request.data)
        finally:
            if serializer.is_valid(raise_exception=True):
                question_vote = serializer.save(
                    account=account,
                    question=question
                )
                vote = serializer.validated_data['vote']
                if vote == "downvote":
                    question.vote_tally = F('vote_tally') - 1
                else:
                    question.vote_tally = F('vote_tally') + 1
                question.save()
                question.refresh_from_db()
                return Response(data={
                    'id': question.id,
                    'tally': question.vote_tally
                }, status=200)

            return Response(serializer.errors, status=400)

class VoteSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    vote = serializers.CharField(write_only=True)

    def validate_vote(self, value):
        if self.instance and (value == self.instance.vote):
            raise ValidationError("Duplicate vote not allowed", code="vote_error")
        return value