在Flask中跨视图访问对象,而不对每个请求进行实例化

时间:2015-08-07 18:29:37

标签: python flask

我正在尝试调用外部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)

0 个答案:

没有答案