Esta es mi clase modelo:
class PoliceAssurance(models.Model): Numpolice = models.IntegerField() Raison = models.CharField(max_length=50) Tel = models.IntegerField() Email = models.CharField(max_length=50)y aquí está mi serializador:
class PoliceSerializer(serializers.ModelSerializer): class Meta: model = PoliceAssurance fields = ('Numpolice','Raison','Tel','Email');Ahora, necesito hacer una solicitud POST a través de una llamada AJAX. ¿Alguien podría proporcionar información sobre cómo puedo abordar esta tarea?
esta es mi vista.py
@login_required(login_url="login/") def home(request): return render(request,"home.html") class PoliceViewset(generics.ListCreateAPIView): queryset = PoliceAssurance.objects.all() serializer_class = PoliceSerializery mi urls.py
urlpatterns=[ url(r'^$', views.home, name='home'), url(r'PoliceAssurance',views.PoliceViewset.as_view(), name='PoliceAssurance'), ]esta es mi solicitud de ajax
$(#suit).click(function(){ var data = {}; data.Numpolice = $(#num).val(); data.Raison = $(#raison).val(); data.Tel = $(#tel).val(); data.Email = $(#email).val(); $.ajax({ type: "POST", url: "/PoliceAssurance/", data: data, contentType: "application/json; charset=utf-8", dataType: "json", success: function(data){ alert(data); }, failure: function(errMsg) { alert(errMsg); } }); });es posible que necesite ver esto, http://www.django-rest-framework.org/topics/ajax-csrf-cors/#javascript-clients y django docs en este enlace (detalle), y mi código me funciona bien gustos
$.ajax({ url: 'your web url', type: 'POST', beforeSend: function (xhr, settings) { xhr.setRequestHeader("X-CSRFToken", '{{ csrf_token }}'); }, success: function (arg) { location.reload() } })Django rest framework no funciona como Django normal. Debe transferir "csrfmiddlewaretoken" en datos a "X-CSRFToken" o "HTTP-X-CSRFToken" en RequestHeader
Probablemente debe enviar la información CSRF junto con la solicitud Ajax, o eximir su vista. Ver aquí Si incluye esta función beforeSend en su ajax, puede funcionar:
$.ajax({ type: "POST", ... beforeSend: function(xhr, settings) { if (!csrfSafeMethod(settings.type) && !this.crossDomain) { xhr.setRequestHeader("X-CSRFToken", {% csrf_token %}); } }, ...Suponiendo que javascript sea parte de una plantilla, {% csrf_token %} puede obtener el csrftoken.
Espero que esto ayude.