我试图在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>
发布于 2022-03-13 05:08:25
发布于 2022-06-26 05:31:17
这个方法不应该被删除,因为jQuery是最被低估的库,在许多现代教程中仍然存在。希望有一天他们能把它带回来。
对于django的相同版本,我觉得很奇怪,在服务器部署之后,报告了这个错误,但在本地机器中从来没有。
如果您已经在您的项目中实现了is_ajax
is_ajax
,并且在很大程度上限定了它的作用域,下面是一种将is_ajax
实现到每个请求的方法
middlewares.py
,在我的例子中,common
应用程序。(不管您在哪个应用程序中添加了这个功能,中间件都是全局调用的包装函数,用于在视图之前或之后执行操作)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
方法。
settings.py
中插入这个MIDDLEWARE = [
'common.middleware.AjaxMiddleware',
]
https://stackoverflow.com/questions/70419441
复制