【发布时间】: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 方法,只能获取、更新和删除
【问题讨论】: