我希望获得flask-wtf提供的csrf-token,并将其赋给一个变量,以便将来在我的flask应用程序架构中使用。有一种方法可以使用隐藏字段{{ form.csrf_token }}呈现它,或者通过jinja的csrf_token()呈现它。但是文档并没有提到如何实现,比如说:
from flask import Flask, jsonify
from flask_wtf.csrf import CSRFProtect
app = Flask(__name__)
app.secret_key = 'secret'
csrf = CSRFProtect(app)
@app.route('/api/get/endpoint_which_returns_json/', methods=['GET'])
def api():
csrf_token = # ??? what belongs here ???
return jsonify({'token': csrf_token})
if __name__ == '__main__':
app.run(debug=True)如何做到这一点呢?提前谢谢你。
发布于 2019-08-26 08:30:23
当您通过Flask-WTF在模板中使用{{ form.csrf_token }}或{{ csrf_token() }}时,它们只是调用flask_wtf.csrf.generate_csrf()函数。您可以导入它并自己调用它,以便在视图中生成一个令牌:
from flask_wtf.csrf import generate_csrf
@app.route('/', methods=['GET'])
def api():
return jsonify({'token': generate_csrf()})我假设这里的想法是,api客户端将负责将令牌与POST请求一起返回到其他api资源?如果您只是在服务器端生成令牌,以便能够验证原本需要它的表单,则可以使用you may as well just disable CSRF protection。
https://stackoverflow.com/questions/57647321
复制相似问题