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

问题描述 投票:0回答:4

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

python ajax angularjs flask
4个回答
25
投票

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)

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


4
投票

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

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 错误。


1
投票

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

我发现对我有用的是,简单地包含 xhr 请求的 get 参数,并简单地省略非 xhr 请求的参数。

例如:

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

0
投票

我用过这个,效果很好:

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
© www.soinside.com 2019 - 2024. All rights reserved.