Django,Axax PUT 400 Bad request

时间:2018-01-04 19:54:34

标签: python json ajax django

我遇到Django(rest)和ajax的问题​​,当我尝试使用方法(PUT)发送表单数据时,在浏览器控制台中发送错误(PUT' / url / api / 1',400 Bad request),在来之前问我开始调查这个错误,并在许多其他帖子中给出了使用" JSON.stringify"的解决方案。要转换为json表单和要更新的数据,我试过这个并且它不起作用,另一个是使用 - contentType:" application / json; charset = utf-8", - 但它也没有用,有人可以帮助我吗?

my views.py

class pacienteDetail(APIView):

    def get_object(self, pk):
        try:
            return modelsHC.Paciente.objects.get(pk=pk)
        except modelsHC.Paciente.DoesNotExist:
            raise Http404
    def get(self, request, pk, format=None):
        paciente = self.get_object(pk)
        serializer = pacienteSerializer(paciente)
        return Response(serializer.data)

    def put(self, request, pk, format=None):
        paciente = self.get_object(pk)
        serializer = pacienteSerializer(paciente, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    def delete(self, request, pk, format=None):
        paciente = self.get_object(pk)
        paciente.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

class pacientesList(generics.ListCreateAPIView):
    queryset = modelsHC.Paciente.objects.all()
    serializer_class = pacienteSerializer
    permission_classes = (IsAuthenticated, )

    def list(self, request):
        queryset = self.get_queryset()
        serializer = pacienteSerializer(queryset, many=True)
        return Response(serializer.data)
    def perform_create(self, serializer):
        serializer.save(user=self.request.user)

my form.html

  <form class="form-edit" action="{% url 'core:paciente_detail' pk=paciente.pk%}">{% csrf_token %}
                <div class="row">
                  <div class="col">
                    <label for="id_first_name">Nombre(s)</label>
                    <input type="text" name="first_name" id="id_first_name" value="">

                  </div>
                  <div class="col">
                    <label for="id_last_name">Apellidos</label>
                    <input type="text" name="last_name" id="id_last_name" value="">
                  </div>
                </div>
              </form>

和我的剧本

$("#btnSave").click(function(e) {
                e.preventDefault();
                $.ajax({
                  type: 'PUT',
                  url: $(".form-edit").attr('action'),
                  data: $(".form-edit").serialize(),
                  //contentType: "application/json; charset=utf-8",
                  dateType: 'json',
                  success: function(res) {
                    console.log(res)
                  },
                  error: function(res) {
                    console.log(res);
                  }
                });
              });

我正在为csrf使用脚本... 我尝试使用&#34;输入:&#39; POST&#39;&#34;但我的api端点不允许POST方法,只允许获取,更新和删除

,单击“保存”按钮时出现错误。 This is the error

1 个答案:

答案 0 :(得分:0)

服务器响应正文中是否有任何数据?查看代码,如果序列化程序对is_valid的调用返回False,您将返回400状态代码,serializer.errors

此外,您在服务器错误日志中看到了什么吗?

您是否可以使用简单的REST客户端(例如curl或postman)重现相同的行为,以消除您的JS对其提出错误请求的可能性?