AttributeError: объект 'WSGIRequest' не имеет атрибута 'is_ajax'
Я пытаюсь изучить ajax в django, но когда я запускаю этот простой тест, я получаю эту ошибку и не могу найти причину, моя версия django - 4.0
AttributeError: 'WSGIRequest' object has no attribute 'is_ajax'
view.py
from django.shortcuts import render, HttpResponse
def home(request):
return render(request,'ajax/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')
]
index.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>
Метод
HttpRequest.is_ajax()
устарел, так как он полагался на специфический для jQuery способ обозначения AJAX-вызовов, в то время как в настоящее время, как правило, используется JavaScript Fetch API. В зависимости от вашего случая использования, вы можете либо написать свой собственный метод определения AJAX, либо использовать новый методHttpRequest.accepts()
, если ваш код зависит от HTTP-заголовка Accept клиента.
Хотя эта функция уже устарела, вы можете создать пользовательскую функцию для проверки типа запроса, как,
def is_ajax(request):
return request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest'
и используйте в любом месте вашего представления как,
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)