我正在尝试调用外部API,该API会对某个域的用户进行身份验证并返回一个对象B
。这个B
对象应该可以在多个视图函数中访问,但我不想在before_request
中的每个请求中实例化它,或者将auth信息存储在会话或数据库中,因为它是敏感的。 / p>
基于this SO post我认为我可以使用g
对象,但当我尝试访问另一个函数中的对象时,我得到AttributeError: '_AppCtxGlobals' object has no attribute 'B'
。
迄今为止唯一有效的方法是将B
初始化为全局变量,但这似乎不是好的做法或安全。
如何创建和存储此对象,以便可以跨多个视图函数访问它?
@app.route('/login', methods=['GET', 'POST'])
def login():
if g.user is not None and g.user.is_authenticated():
return redirect(url_for('index'))
form = LoginForm()
if form.validate_on_submit():
email = form.email.data
pw = form.password.data
g.B = Bindings(domain='somewebsite.com', user=email, auth=pw)
return render_template('login.html', form=form)
@app.route('/devices')
def devices():
devices = g.B.get_all_devices()
return render_template('home/devices.html', devices=devices)