Estoy tratando de aprender ajax en django, pero cuando ejecuto esta prueba simple, aparece este error y no puedo encontrar el motivo, mi versión de django es 4.0.
AttributeError: 'WSGIRequest' object has no attribute 'is_ajax'ver.py
from django.shortcuts import render, HttpResponse def home(request): return render(request,'myapp/index.html') def ajax_test(request): if request.is_ajax(): message = "This is ajax" else: message = "Not ajax" return HttpResponse(message)urls.py
urlpatterns = [ path('',views.home,name='home'), path('ajax_test/', views.ajax_test, name='ajax_test') ]índice.html
<button id="btn">click me!</button> <script> $("#btn").click(function () { $.ajax({ type: "GET", url: "{% url 'ajax_test' %}", success: function () { console.log("done"); }, error: function () { console.log("error"); }, }); }); </script>De las notas de la versión 3.1
El método
HttpRequest.is_ajax()está en desuso porque se basaba en una forma específica de jQuery de significar las llamadas AJAX, mientras que el uso actual tiende a usar la API de recuperación de JavaScript. Según su caso de uso, puede escribir su propio método de detección de AJAX o usar el nuevo métodoHttpRequest.accepts()si su código depende del encabezado HTTP Accept del cliente.
Aunque ha quedado en desuso, puede crear una función personalizada para verificar el tipo de solicitud como,
def is_ajax(request): return request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest'y usar en cualquier lugar de su vista como,
from django.shortcuts import HttpResponse def is_ajax(request): return request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest' def ajax_test(request): if is_ajax(request=request) : message = "This is ajax" else: message = "Not ajax" return HttpResponse(message)Para completar la respuesta JPG basada en las notas de la versión 3.1
request.is_ajax() se puede reproducir exactamente como request.headers.get('x-requested-with') == 'XMLHttpRequest'
El objeto de request utilizado por Django es como solicitudes . Puede identificar una solicitud AJAX cuando su cliente usa el encabezado específico x-requested-with establecido con XMLHttpRequest .