Flask-WTF CSRF 保护 & ajax 400 解决方法

一、配置

from flask_wtf.csrf import CSRFProtect

...
csrf = CSRFProtect()
csrf.init_app(app)
...



1、如果模板中存在表单,不需要做任何事情,与之前一个样:

{{ form.csrf_token }}



2、但如果模板中没有表单,你仍然需要一个CSRF令牌:



3、只要没通过CSRF验证,都会返回400 相应,比如ajax调用。我们 可以自定义这个错误相应

@csrf.error_handler
def csrf_error(reason):
    return render_template("csrf_error.html",reason=reason), 400



4、强烈建议对所有视图启用CSRF保护。但也提供了某些视图函数不需要保护的装饰器:

@csrf.exempt
@blueprint.route('/foo',methods=["GET","POST"])
def my_handler():
   ...
    return jsonify()


二、AJAX

1、假设已经使用了CSRFProtect(app), 你可以通过 {{ csrf_token() }} 获取CSRF令牌。这个方法在每个模板中都可以使用,并不需要担心在没有表单时如何渲染CSRF令牌字段。
这里推荐的方式是在 标签中渲染CSRF令牌:

或在



2、下面例子采用了在标签渲染的方式,在

你可能感兴趣的:(Flask-WTF CSRF 保护 & ajax 400 解决方法)