确定Flask请求是否来自JavaScript [英] Identify if Flask request is from JavaScript or not

查看:260
本文介绍了确定Flask请求是否来自JavaScript的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建一个Flask错误处理程序,如果请求来自JavaScript,但是返回一个JSON响应,否则返回一个重定向。我尝试使用 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'))


解决方案

回答@davidism是有道理的。 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);
}
]);


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

解决方案

Answer by @davidism makes sense. 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);
    }
]);

这篇关于确定Flask请求是否来自JavaScript的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆