AttributeError:“WSGIRequest”对象没有属性“is_ajax”

Posted

技术标签:

【中文标题】AttributeError:“WSGIRequest”对象没有属性“is_ajax”【英文标题】:AttributeError: 'WSGIRequest' object has no attribute 'is_ajax' 【发布时间】:2022-01-21 22:19:17 【问题描述】:

我试图在 django 中学习 ajax,但是当我运行这个简单的测试时,我得到了这个错误,我找不到原因, 我的 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,'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')
]

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>

【问题讨论】:

【参考方案1】:

来自Release Notes of 3.1

HttpRequest.is_ajax() 方法已被弃用,因为它依赖于 jQuery 特定的方式来表示 AJAX 调用,而当前使用倾向于使用 javascript Fetch API。根据您的用例,您可以编写自己的 AJAX 检测方法,或者如果您的代码依赖于客户端 Accept HTTP 标头,则使用新的 HttpRequest.accepts() 方法。

即使它已被弃用,您也可以创建一个自定义函数来检查请求类型,

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)

【讨论】:

以上是关于AttributeError:“WSGIRequest”对象没有属性“is_ajax”的主要内容,如果未能解决你的问题,请参考以下文章

AttributeError:“字节”对象没有属性“告诉”

AttributeError: 'RDD' 对象没有属性 'show'

AttributeError:“NumpyArrayIterator”对象没有属性“类”

AttributeError:模块 'dbus' 没有属性 'lowlevel'

AttributeError:模块'keras'没有属性'initializers'

AttributeError:“会话”对象没有属性“会话”