我想检测浏览器是否通过 AJAX (AngularJS) 发出请求,以便我可以返回 JSON 数组,或者是否必须渲染模板。我该怎么做?
Flask 在
is_xhr
对象中带有 request
属性。
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)
注意: 此解决方案已弃用并且不再可行。
对于未来的读者:我所做的如下:
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 错误。
没有任何方法可以确定请求是否是由ajax发出的。
我发现对我有用的是,简单地包含 xhr 请求的 get 参数,并简单地省略非 xhr 请求的参数。
例如:
example.com/search?q=Boots&api=1
example.com/search?q=Boots
我用过这个,效果很好:
if request.method == 'POST' and request.headers.get('X-Requested-With') == 'XMLHttpRequest':
current_app.logger.info('Recognized an AJAX request!')
# rest of code to handle initial page request