【发布时间】:2012-01-20 11:17:58
【问题描述】:
有没有办法在 Python 中检查请求是否为 AJAX?
相当于PHP的$_SERVER['HTTP_X_REQUESTED_WITH'] == 'xmlhttprequest'?
【问题讨论】:
标签: python ajax http-headers xmlhttprequest
有没有办法在 Python 中检查请求是否为 AJAX?
相当于PHP的$_SERVER['HTTP_X_REQUESTED_WITH'] == 'xmlhttprequest'?
【问题讨论】:
标签: python ajax http-headers xmlhttprequest
如果 AJAX 框架在其请求中设置了 X-Requested-With 标头,那么您将能够使用该标头来检测 AJAX 调用。这取决于客户端框架。
获取 HTTP 标头取决于您选择的 Python 框架。在 Django 中,request 对象有一个 is_ajax method 可以直接使用。
【讨论】:
request.is_ajax()
is_ajax() 方法也已被弃用。
is_ajax() 在 django 3.2 和 2021 年 5 月 28 日之前已弃用。
查看how to check if request is ajax in turbogears
这也是如何在 Django 中执行此操作的(这取决于您的框架):How to check contents of incoming HTTP header request
【讨论】:
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
【讨论】: