如何在 Python 的 Flask 中识别通过 AJAX 发出的请求?

Posted

技术标签:

【中文标题】如何在 Python 的 Flask 中识别通过 AJAX 发出的请求?【英文标题】:How can I identify requests made via AJAX in Python's Flask? 【发布时间】:2014-09-01 11:44:21 【问题描述】:

我想检测浏览器是否通过 AJAX (AngularJS) 发出请求,以便我可以返回 JSON 数组,或者我是否必须呈现模板。我该怎么做?

【问题讨论】:

【参考方案1】:

Flask 在request 对象中带有is_xhr 属性。

from flask import request
@app.route('/', methods=['GET', 'POST'])
def home_page():
    if request.is_xhr:
        context = controllers.get_default_context()
        return render_template('home.html', **context)

注意:此解决方案已弃用且不再可行。

【讨论】:

请注意(来自 Flask 官方文档):“这只适用于支持 X-Requested-With 标头并将其设置为“XMLHttpRequest”的库。” "'Request.is_xhr' 自烧瓶版本 0.13 起已被弃用",上述答案不再可行 @kres0345 您想回答当前有效的方法吗?我会支持您的回答? @AlexLordThorsen 我找不到检查请求是否来自 ajax 的“正确”方法,但我发布了一个适合我的目的的解决方法【参考方案2】:

对于未来的读者:我所做的是如下所示:

request_xhr_key = request.headers.get('X-Requested-With')
if request_xhr_key and request_xhr_key == 'XMLHttpRequest':
   #mystuff

   return result
abort(404,description="only xhlhttprequest is allowed")

如果请求标头不包含“XMLHttpRequest”值,这将给出 404 错误。

【讨论】:

【参考方案3】:

没有任何方法可以确定请求是否由 ajax 发出。

我发现对我有用的是简单地为 xhr 请求包含一个 get 参数,而在非 xhr 请求中简单地省略该参数。

例如:

XHR 请求:example.com/search?q=Boots&api=1 其他请求:example.com/search?q=Boots

【讨论】:

以上是关于如何在 Python 的 Flask 中识别通过 AJAX 发出的请求?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用flask在python脚本中处理上传的csv文件

如何在 Flask 中接受通过 ajax 发送的 FormData?

YOLOv5/v7 Flask Web 车牌识别 | YOLOv7 + EasyOCR 实现车牌识别

如何让 python 使用 Flask 和 JINJA2 从动态表中检索用户输入的数据

Python之Flask面试题

如何通过 id 值向 html 元素添加属性(python flask lxml)