【发布时间】:2014-04-13 03:27:36
【问题描述】:
我使用的是 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 文档状态:
如果 mimetype 是 application/json,则此 [request.json,如果我理解正确] 将包含已解析的 JSON 数据。否则这将是无。
这让我相信解析 JSON 会以某种方式失败,尽管我不确定这是怎么回事。我怎样才能看到问题所在?
【问题讨论】:
-
既然docs 说应该改用get_json() 方法,你有没有试过改用它?
-
我确实尝试过(假设我可以将每个 'request.json' 替换为 'request.get_json()'。)我得到完全相同的错误。
-
您可以在请求中尝试
data: JSON.stringify({body: 'you know that i could use some body', tags: 'tagggssss'}),吗?