Flaskでpostされたjsonを受け取る
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')