在Flask中访问request.json导致异常
我在使用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'}),