我想获取flask-wtf
提供的csrf令牌并将其分配给变量,以供将来与我的flask应用程序体系结构一起使用。有一种方法可以使用隐藏字段{{ form.csrf_token }}
或通过csrf_token()
来渲染jinja。但是文档没有提到如何实现以下目标:
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)
如何实现?预先谢谢你。
答案 0 :(得分:0)
当您通过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。