我试图学习 AJAX 在django,但当我运行这个简单的测试,我得到了这个错误,我找不到原因,我的django版本是4. 0
AttributeError: 'WSGIRequest' object has no attribute 'is_ajax'
查看.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)
网址.py
urlpatterns = [
path('',views.home,name='home'),
path('ajax_test/', views.ajax_test, name='ajax_test')
]
索引.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>
3条答案
按热度按时间mwecs4sa1#
来自3.1的发行说明
HttpRequest.is_ajax()
方法已被弃用,因为它依赖于特定于jQuery的方式来表示 AJAX 调用,而当前的用法倾向于使用JavaScript Fetch API。根据您的使用情况,您可以编写自己的AJAX检测方法,或者如果您的代码依赖于客户端Accept HTTP头,则使用新的HttpRequest.accepts()
方法。即使它已经被弃用,您也可以创建一个自定义函数来检查请求类型,
并在您的视图中的任何位置使用,
j13ufse22#
根据3.1的发行说明完成JPG答案
**request.is_ AJAX ()可以完全按照request.headers.get('x-请求的-with')== 'XMLHttpRequest'**的方式重新生成
Django使用的
request
对象类似于requests。当您的客户端使用特定的头部x-requested-with
设置XMLHttpRequest
时,您可以识别 AJAX 请求。z0qdvdin3#
这个方法不应该被删除,因为jQuery是最被低估的库,在许多现代教程中仍然强烈地存在。希望有一天他们会把它带回来。
我发现同一版本的django很奇怪,在服务器部署后报告了这个错误,但从来没有在本地机器上报告过。
如果您已经在项目中实现了
is_ajax
,并且它的作用域很大,那么下面是一种针对每个请求实现is_ajax
的方法1.在你的任何一个应用中创建一个
middlewares.py
,在我的例子中,是common
应用。(不管你在哪个应用中添加这个,中间件是全局调用的 Package 器函数,在视图之前或之后执行操作)这将在每个请求被视图接收之前对该请求定义
is_ajax
方法。1.将其插入
settings.py
: