我遇到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方法,只允许获取,更新和删除
答案 0 :(得分:0)
服务器响应正文中是否有任何数据?查看代码,如果序列化程序对is_valid
的调用返回False
,您将返回400状态代码,serializer.errors
。
此外,您在服务器错误日志中看到了什么吗?
您是否可以使用简单的REST客户端(例如curl或postman)重现相同的行为,以消除您的JS对其提出错误请求的可能性?