有没有办法检查请求是否是Python中的AJAX?
相当于PHP的$_SERVER['HTTP_X_REQUESTED_WITH'] == 'xmlhttprequest'
?
答案 0 :(得分:27)
如果AJAX框架在其请求中设置了X-Requested-With标头,那么您将能够使用该标头来检测AJAX调用。这取决于客户端框架。
获取HTTP标头取决于您选择的Python框架。在Django中,request
对象有一个is_ajax
method,您可以直接使用。
答案 1 :(得分:0)
选中此how to check if request is ajax in turbogears
这也是关于如何在Django中做到这一点(取决于你的框架):How to check contents of incoming HTTP header request
答案 2 :(得分:0)
is_ajax()
自 Django 3.1(截至 2021 年 5 月 28 日)起已被弃用,因为他们表示它依赖于 jQuery 发送请求的方式,但由于人们经常使用 fetch
方法进行 Ajax 调用,它在许多情况下变得不可靠。
通常,当浏览器仅加载页面时,会在第一个选项的标题中请求 text/html
。但是,如果您进行 API 调用,则默认情况下它会变为 */*
,如果您在标头中附加 Accept: application/json
,则它会变为
application/json
因此,您可以通过此轻松检查请求是否来自 ajax
import re # make sure to import this module at the top
在你的函数中
requested_html = re.search(r'^text/html', request.META.get('HTTP_ACCEPT'))
if not requested_html:
# ajax request it is