【问题标题】:Django, Axax PUT 400 Bad requestDjango,Axax PUT 400 错误请求
【发布时间】:2018-06-14 14:47:22
【问题描述】:

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

我的意见.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)

我的表单.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 使用脚本... 我正在尝试使用“类型:'POST'”,但我的 api 端点不允许使用 POST 方法,只能获取、更新和删除

这是我单击保存按钮时的错误。

【问题讨论】:

    标签: python json ajax django


    【解决方案1】:

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

    此外,您是否在服务器错误日志中看到任何内容?

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

    【讨论】:

    • 在服务器日志中只显示“PUT /url/....” HTTP/1.1 400 并且邮递员正在工作
    • 请求的响应体呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 2015-07-05
    • 2020-05-09
    • 2014-10-11
    • 2014-08-03
    相关资源
    最近更新 更多