How can I identify requests made via AJAX in Python's Flask?

后端 未结 3 2265
無奈伤痛
無奈伤痛 2021-02-19 04:59

I\'d like to detect if the browser made a request via AJAX (AngularJS) so that I can return a JSON array, or if I have to render the template. How can I do this?

相关标签:
3条回答
  • 2021-02-19 05:09

    for future readers: what I do is something like below:

    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")
    

    this will give an 404 error if the request header doesn't contain 'XMLHttpRequest' value.

    0 讨论(0)
  • 2021-02-19 05:10

    Flask comes with a is_xhr attribute in the request object.

    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)
    

    Notice: This solution is deprecated and not viable anymore.

    0 讨论(0)
  • 2021-02-19 05:26

    There isn't any way to be certain whether a request is made by ajax.

    What I found that worked for me, was to simply include a get parameter for xhr requests and simply omit the parameter on non-xhr requests.

    For example:

    • XHR Request: example.com/search?q=Boots&api=1
    • Other Requests: example.com/search?q=Boots
    0 讨论(0)
提交回复
热议问题