conta's diary

思ったこと、やったことを書いてます。 twitter: @conta_

Flaskでpostされたjsonを受け取る

Flaskのrequestでデータを受け取るには

  • request.data
  • request.form
  • request.json

等がある。
それぞれ、Content-Typeで受け取り方が切り替わるらしい。
request.jsonはContent-Typeapplication/jsonに設定していれば
自動的にオブジェクトへパースしてデータを返してくれる。
POSTするデータはJSON.stringifyしてないと400エラーが出て怒られる。

なので、Javascript側ではajaxの設定を下記のようにする。

  • Content-Typeapplication/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')


参考API — Flask 0.9dev documentation