通过ajax将特定标头发送到烧瓶

时间:2017-12-08 08:08:08

标签: jquery python ajax python-3.x flask

在我的flask api文件(api.py)中,我想得到标题" USER"在他发送请求时联系他。所以我有这条线:

@app.before_request
    def prepare():
        print('Step 1 : {}'.format(request.headers.get("USER")), file=sys.stdout)
        username = request.headers.get("USER")
        user = find.user_by_username(username)
        print('Step 2', file=sys.stdout)

在我的前端,我有一个ajax请求来获取用户的任务:

$.ajax({
    url : urlBackend+"weapon/"+weapon,
    type : 'GET',
    dataType : 'json',
    headers: {
        'USER':'toto'
    },
    success : function(resu, statut){
        //I get the weapon of my user
    },

    error : function(resultat, statut, erreur){
      console.log("resultat : "+dump(resultat)+"; statut : "+statut+"; erreur : "+erreur);
    },

    complete : function(resultat, statut){

    }

  });

我的问题是我的功能准备(在文件api.py中)找不到用户。在我的控制台中,它不打印"步骤1:toto步骤2"但是"步骤1:无"

有人知道我做错了什么?

2 个答案:

答案 0 :(得分:0)

如果您出于特殊原因使用自定义标头发送数据,我想知道。 您的请求的问题是,您是将其指定为GET请求,但使用的方法是OPTIONS。这是因为你从不发送任何数据

如果你改变这一点:

headers: {
    'USER':'toto'
}, 

为:

data: {
    'USER':'toto'
},

在你的@ app.before_request中使用:

print('Step 1 : {}'.format(request.args.get('USER')), file=sys.stdout)
username = request.args.get('USER')
user = find.user_by_username(username)
print('Step 2', file=sys.stdout)

这实际上会发送数据。如果有帮助,请告诉我

答案 1 :(得分:0)

最后我的问题来自这样一个事实:当我使用" header"在我的jquery请求中添加标题时或者" beforeSend" (由于我不知道的原因)他们不会只有2个请求会被发送到烧瓶。

第一个请求方法:" OPTIONS"第二个将是真正的jquery请求。但就像在第一个它们没有标题时它失败了,请求就在这里停止。

所以为了解决这个问题,我在我的函数准备开始时添加了if request.method != 'OPTIONS':