Flaskのrequestでデータを受け取るには
- request.data
- request.form
- request.json
等がある。
それぞれ、Content-Typeで受け取り方が切り替わるらしい。
request.jsonはContent-Typeをapplication/jsonに設定していれば
自動的にオブジェクトへパースしてデータを返してくれる。
POSTするデータはJSON.stringifyしてないと400エラーが出て怒られる。
なので、Javascript側ではajaxの設定を下記のようにする。
- Content-Typeをapplication/jsonに
- データはJSON.stringifyで文字列に
例)
$.ajax(
{
url:'/api/test',
type:'POST',
data:JSON.stringify(data),
dataType: 'json',
contentType: 'application/json'
})
.done(function(data, textStatus, jqXHR ){
console.log("done");
console.log(data);
})
.fail(function(jqXHR, textStatus, errorThrown){
console.log("failed");
});;
Python側では念の為にヘッダーのチェックを行う。
@app.route('/api/test', methods=['POST']) def face_info(): if request.headers['Content-Type'] != 'application/json': print(request.headers['Content-Type']) return flask.jsonify(res='error'), 400 print request.json return flask.jsonify(res='ok')