FlaskとAjaxPost HTTP / 1.1 '400



Flask Ajax Post Http 1



どうもありがとうございます https://stackoverflow.com/ 著者は本当に強気で、問題を解決することができます。

より多くの人々を助けるために、それは再版され、それをマークします。



を使用している場合 Flask-WTFCRSF保護 ビューを免除するか、AJAXPOSTリクエストにもCSRFトークンを含める必要があります。

免除はデコレータで行われます:



@ csrf.exemptを追加できます

@csrf.exempt @app.route('/json_submit', methods=['POST']) def submit_handler(): # a = request.get_json(force=True) app.logger.log('json_submit') return {}

トークンをAJAXリクエストに含めるには、トークンをページのどこか先のページまたは生成されたJavaScriptに補間してから、X-CSRFTokenを設定します。ヘッダ。 jQueryを使用する場合は、 ajaxSetup

これは以下に追加する必要があります:



メタタグの使用例(Flask-WTF CSRFドキュメントから):

var csrftoken = $('meta[name=csrf-token]').attr('content') $.ajaxSetup({ beforeSend: function(xhr, settings) { if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type)) { xhr.setRequestHeader('X-CSRFToken', csrftoken) } } })

そしてあなたのJSコードのどこかに:

POST

ハンドラーは実際にはJSONデータを投稿しませんが、それでも通常のURLエンコードされたrequest.form (データはFlask側でapplication/jsonになります)AJAXコンテンツタイプをJSON.stringify()に設定する必要があります。 var request = $.ajax({ url: '/json_submit', type: 'POST', contentType: 'application/json', data: JSON.stringify({ id: id, known: is_known }), }) .done( function (request) { })を使用します実際にJSONを送信するには:

request.get_json()

これで、データにPython構造としてアクセスできるようになりました。 dataType: 'json',方法

$.ajax flask.json.jsonify()へのパラメータあなたの見解が必要な場合にのみ必要です 戻り値 JSON(例:使用した

|_+_|
JSON応答を生成します)。これにより、jQueryは応答の処理方法を知ることができます。