我的代码行如下:
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)
答案 0 :(得分:1)
g
全局变量每个请求,而不是每个服务器。下一个请求g
再次为空。引用Application Globals documentation:
要从一个函数到另一个函数共享有效仅一个请求的数据,全局变量不够好,因为它会在线程环境中中断。 Flask为您提供了一个特殊对象,确保它仅对活动请求有效,并为每个请求返回不同的值。
(强调我的)
使用@app.before_request
handler为每个请求再次加载用户,查找session['email']
密钥。您可能想要考虑使用更安全的东西来跟踪用户请求的请求。像Flask-Login这样的插件可以为您处理所有这些。