AttributeError:'_ RequestGlobals'对象没有属性'user'

时间:2014-09-16 07:10:32

标签: python flask sqlalchemy blueprint

我的代码行如下:

post = Post(title=form.title.data, slug=form.slug.data, body=form.body.data, user=g.user)

请注意我正在使用蓝图,并在我的users.py中创建了用户,现在正在访问

g.user添加backref = 'user'

并面临错误

 AttributeError: '_RequestGlobals' object has no attribute 'user'

在users.py中,我将g.user设置为:

@users.route('/signup', methods=['GET', 'POST'])
def signup():
  form = SignupForm()

  if request.method == 'POST':
    if form.validate() == False:
      return render_template('users/signup.html', form=form)
    else:
      g.user = User(form.firstname.data, form.lastname.data, form.email.data, form.password.data)
      db.session.add(g.user)
      db.session.commit()
      session['email'] = g.user.email
      return redirect(url_for('users.profile'))

  elif request.method == 'GET':
    return render_template('users/signup.html', form=form)

1 个答案:

答案 0 :(得分:1)

g全局变量每个请求,而不是每个服务器。下一个请求g再次为空。引用Application Globals documentation

  

要从一个函数到另一个函数共享有效仅一个请求的数据,全局变量不够好,因为它会在线程环境中中断。 Flask为您提供了一个特殊对象,确保它仅对活动请求有效,并为每个请求返回不同的值。

(强调我的)

使用@app.before_request handler为每个请求再次加载用户,查找session['email']密钥。您可能想要考虑使用更安全的东西来跟踪用户请求的请求。像Flask-Login这样的插件可以为您处理所有这些。