0

我的代码行如下:

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)
4

1 回答 1

1

g全局变量是每个请求,而不是每个服务器。下一个请求g又是空的。引用Application Globals 文档

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

(强调我的)

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

于 2014-09-16T07:28:49.697 回答