首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >AttributeError: WSGIRequest对象没有属性“is_ajax”

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

Stack Overflow用户
提问于 2021-12-20 08:59:28
回答 2查看 10.7K关注 0票数 15

我试图在django中学习ajax,但是当我运行这个简单的测试时,我得到了这个错误,我找不到原因,我的django版本是4.0

代码语言:javascript
代码运行次数:0
运行
复制
AttributeError: 'WSGIRequest' object has no attribute 'is_ajax'

view.py

代码语言:javascript
代码运行次数:0
运行
复制
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

代码语言:javascript
代码运行次数:0
运行
复制
urlpatterns = [
    path('',views.home,name='home'),
    path('ajax_test/', views.ajax_test, name='ajax_test')
]

index.html

代码语言:javascript
代码运行次数:0
运行
复制
<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>
EN

回答 2

Stack Overflow用户

发布于 2022-03-13 13:08:25

完成基于答案的3.1发行说明

request.is_ajax()完全可以被复制成request.headers.get('x-requested-with') == 'XMLHttpRequest'

request对象由Django使用,类似于请求。当客户端使用带有x-requested-with的特定标头XMLHttpRequest集时,可以标识AJAX请求。

票数 8
EN

Stack Overflow用户

发布于 2022-06-26 13:31:17

这个方法不应该被删除,因为jQuery是最被低估的库,在许多现代教程中仍然存在。希望有一天他们能把它带回来。

对于django的相同版本,我觉得很奇怪,在服务器部署之后,报告了这个错误,但在本地机器中从来没有。

如果您已经在您的项目中实现了is_ajax is_ajax ,并且在很大程度上限定了它的作用域,下面是一种将is_ajax实现到每个请求的方法

  1. 在你的任何一个应用程序中创建一个middlewares.py,在我的例子中,common应用程序。(不管您在哪个应用程序中添加了这个功能,中间件都是全局调用的包装函数,用于在视图之前或之后执行操作)
代码语言:javascript
代码运行次数:0
运行
复制
class AjaxMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        def is_ajax(self):
            return request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest'
        
        request.is_ajax = is_ajax.__get__(request)
        response = self.get_response(request)
        return response

这将在视图接收到每个请求之前对其定义一个is_ajax方法。

  1. settings.py中插入这个
代码语言:javascript
代码运行次数:0
运行
复制
MIDDLEWARE = [
    'common.middleware.AjaxMiddleware', 
]
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70419441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档