【问题标题】:AttributeError: 'WSGIRequest' object has no attribute 'is_ajax'AttributeError:“WSGIRequest”对象没有属性“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>

【问题讨论】:

    标签: django ajax xmlhttprequest


    【解决方案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)

    【讨论】:

      猜你喜欢
      • 2018-09-06
      • 1970-01-01
      • 2011-03-15
      • 2021-07-04
      • 2021-12-13
      • 1970-01-01
      • 2019-10-20
      • 2016-02-02
      • 1970-01-01
      相关资源
      最近更新 更多