【发布时间】:2018-02-08 16:06:52
【问题描述】:
只要设置了@csrf.exempt,Ajax 请求就可以被解包。一旦我将其注释掉,request.get_json(force=True) 就会失败。把它通过调试器:
(Pdb) p request._cached_json
'Request' object has no attribute '_cached_json'
模板代码:
var csrf_token = "{{ csrf_token() }}";
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrf_token);
}}});
发送请求:
save()
{
$.post("/save", JSON.stringify({'name': 'aaa'}), accept_reply, "json");
}
Flask 处理请求:
@app.route('/save', methods=("POST",))
#@csrf.exempt
def save():
order_data = request.get_json(force=True)
return jsonify({"status": "ok"})
当@csrf.exempt 被注释掉时,request 没有属性_cached_json:request.get_json(force=True) 引发异常,而request.get_json() 只返回 None。
【问题讨论】:
标签: jquery ajax python-3.x flask csrf