How can I identify requests made via AJAX in Python's Flask?
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.
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 resultabort(404,description="only xhlhttprequest is allowed")
this will give an 404 error if the request header doesn't contain 'XMLHttpRequest' value.
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