flask响应原生ajax的post,Flask和Ajax Post请求400

小编典典

如果您使用的是Flask-WTF CSRF保护,则需要免除您的视图或将CSRF令牌也包含在AJAX POST请求中。

豁免是通过装饰器完成的:

@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时,请使用ajaxSetuphook。

使用元标记的示例(来自Flask-WTF CSRF文档):

在您的JS代码中:

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)

}

}

})

您的处理程序实际上尚未发布JSON数据;它仍然是常规的url编码POST(数据将最终在request.formFlask一侧);您必须将AJAX内容类型设置为application/json并用于JSON.stringify()实际提交JSON:

var request = $.ajax({

url: "/json_submit",

type: "POST",

contentType: "application/json",

data: JSON.stringify({

id: id,

known: is_known

}),

})

.done( function (request) {

})

现在的数据可以作为一个Python结构与访问request.get_json()方法。

在dataType: "json",对参数$.ajax时,你的看法是只需要 返回

JSON(例如,你使用flask.json.jsonify()产生JSON响应)。它使jQuery知道如何处理响应。

2020-07-26

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值