检查请求是否是Python中的AJAX

时间:2011-12-14 17:05:50

标签: python ajax http-headers xmlhttprequest

有没有办法检查请求是否是Python中的AJAX?

相当于PHP的$_SERVER['HTTP_X_REQUESTED_WITH'] == 'xmlhttprequest'

3 个答案:

答案 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