确定Flask请求是否来自JavaScript [英] Identify if Flask request is from JavaScript or not
问题描述
我想创建一个Flask错误处理程序,如果请求来自JavaScript,但是返回一个JSON响应,否则返回一个重定向。我尝试使用 回答@davidism是有道理的。 I want to create a Flask error handler that returns a JSON response if the request was from JavaScript but returns a redirect otherwise. I tried using
Answer by @davidism makes sense.
这篇关于确定Flask请求是否来自JavaScript的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋! request.is_xhr
,但即使对于JavaScript请求也是false。如何检查请求是否来自JavaScript?
pre $ c $ @ app.errorhandler(例外)
def unhandled_exception(error ):
如果request.is_xhr:
return flask.jsonify(error ='yes')
return redirect(url_for('error'))
is_xhr
只有当某些JavaScript库设置了某个头时才为真。因此,我已经在'$ httpProvider'
config中手动设置标题'X-Requested-With'为' XMLHttpRequest
在 AngularJs
中。这确保了在后端我会得到' is_xhr
'为真正的AJAX请求。
app.config([
'$ httpProvider',
function($ httpProvider){
$ httpProvider.defaults.headers.common ['X-Requested-With'] ='XMLHttpRequest';
var interceptor = [
'$ q',
'$ rootScope',
函数($ q,$ rootScope){
'responseError ':function(reject){
if(reject.status!= undefined&& reject.status!='undefined'){
window.location.href ='/ error';
$;
return service;
}
];
$ httpProvider.interceptors.push(interceptor);
}
]);
request.is_xhr
, but it is false even for JavaScript requests. How can I check if the request is from JavaScript?@app.errorhandler(Exception)
def unhandled_exception(error):
if request.is_xhr:
return flask.jsonify(error='yes')
return redirect(url_for('error'))
is_xhr
was only true when a certain header was set by some JavaScript libraries. So, I have set header 'X-Requested-With' to 'XMLHttpRequest
' manually in '$httpProvider'
config in AngularJs
. This ensures that on the back end I will get 'is_xhr
' true for AJAX request.app.config([
'$httpProvider',
function ($httpProvider) {
$httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
var interceptor = [
'$q',
'$rootScope',
function ($q, $rootScope) {
'responseError': function (rejection) {
if(rejection.status != undefined && rejection.status != 'undefined') {
window.location.href = '/error';
}
}
};
return service;
}
];
$httpProvider.interceptors.push(interceptor);
}
]);