如何在 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 中接受通过 ajax 发送的 FormData?
YOLOv5/v7 Flask Web 车牌识别 | YOLOv7 + EasyOCR 实现车牌识别