Flask request.get_json()引发BadRequest

时间:2017-09-07 09:14:45

标签: python json flask

我有一个带有此端点的Flask API:

@app.route('/classify/', methods=['POST'])
def classify():
    data = request.get_json()

当我使用python发布请求时,eveything很好。

但是当我使用Postman时,我得到了:

<class 'werkzeug.exceptions.BadRequest'> : 400: Bad Request

我同时发送相同的Json(我将其复制/粘贴以确保)。我相信这个问题是由我的json中的一些“\ t”引起的,它们是由python而不是Postman转义的。

有没有办法检索原始json,并在应用程序中处理它(逃避需要转义的内容)?还是另一种获得json的方式?

编辑:这是一个与你建议重复的问题不同的问题,因为你的建议使用get_json,这就是我的问题。

3 个答案:

答案 0 :(得分:5)

好的,事实证明你可以替换:

data = request.get_json(

通过:

data = json.loads(request.data, strict=False) # strict = False allow for escaped char
requestspata包含字符串格式的json,因此您可以处理需要转义的字符。

答案 1 :(得分:1)

如果您的数据可能为空或提出了错误的请求,请使用request.data而不是request.get_json()

答案 2 :(得分:0)

关于ajax和flask的所有错误都从python文件模板发送数据。

接收ajax json的所有数据。

    data = request.get_json("")
    print(data)
    return "success!"
        
    Send data in ajax json.
    
    $(document).on('click','#texthide',function(){
            
        
            var text = $("#textVal").val();
            var font = $("#font_text").val();
            var color = $("#color_text").val();
            var start_text = $("#start_text").val();
            var end_text = $("#end_text").val();
            var vid_id = new_d
            console.log(text);
        
            $.ajax({
                url: '/videos/test_text',
                type: 'POST',
                contentType: 'application/json; charset=utf-8',
                datatype: "json",
              
                data: JSON.stringify(
                    
                {  text: $("#textVal").val(),
                    font: $("#font_text").val(),
                    color:  $("#color_text").val(),
                    start_text: $("#start_text").val(),
                    end_text: $("#end_text").val(),
                    video_id: new_d
                })
            });
        });