在Flask中访问request.json导致异常

0 投票
1 回答
844 浏览
提问于 2025-04-18 02:23

我在使用Flask 0.10.1,并且我有一个Flask函数是这样开始的:

@app.route('/logs', methods=['POST'])
def add_log():
    db = get_db()

    print("\ninside /logs POST\n===================")
    print(request.headers)

    print('--------------')
    print(request.form)

    print('--------------')
    try:
        print(request.json)
    except Exception as e:
        print('SOMETHING REAL BAD HAPPENED')
        print(e)

    if not request.json:
        print("abandon ship!")
        abort(400)

我通过JQuery向这个地址发送了一个ajax请求:

    $.ajax({
      url: '/logs',
      contentType: 'application/json',
      type: 'POST',
      data: {'body': 'you know that i could use some body', 'tags': 'tagggssss'},
      success: function(data) {
        console.log(data);
      }.bind(this),
      error: function(xhr, status, err) {
        console.error(this.props.url, status, err.toString());
      }.bind(this)
    });

看起来在我尝试访问request.json的时候,Flask函数就失败了。以下是Flask服务器的输出:

inside /logs POST
===================
X-Requested-With: XMLHttpRequest
Accept-Language: en-US,en;q=0.5
Host: 127.0.0.1:5000
Referer: http://127.0.0.1:5000/
Connection: keep-alive
Content-Type: application/json; charset=UTF-8
Pragma: no-cache
Content-Length: 55
Accept-Encoding: gzip, deflate
Accept: */*
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:28.0) Gecko/20100101 Firefox/28.0
Cache-Control: no-cache


--------------
ImmutableMultiDict([])
--------------
SOMETHING REAL BAD HAPPENED
400: Bad Request
127.0.0.1 - - [11/Apr/2014 13:16:30] "POST /logs HTTP/1.1" 400 -

Flask的文档上说:

如果内容类型是application/json,那么这个[request.json,如果我理解没错的话]将包含解析后的JSON数据。否则,它将是None。

这让我觉得解析JSON的过程可能出现了问题,但我不太确定具体是什么原因。那我该怎么查看问题出在哪里呢?

1 个回答

1

你实际上并没有发送JSON数据;只是你的类型声明说你在发送JSON。你应该使用 JSON.stringify() 来处理一下:

  data: JSON.stringify({'body': 'you know that i could use some body', 'tags': 'tagggssss'}),

撰写回答