python - 在 flask-login中使用login_user报错?
问题描述
在flask中使用了flask-login作登录验证,下面这个是User模型:
class User(db.Model, UserMixin): id = db.Column(db.INTEGER, primary_key=True) name = db.Column(db.String(64)) email = db.Column(db.String(64)) password_hash = db.Column(db.String(128)) @property def password(self):raise AttributeError(’password is not a readable attribute’) @password.setter def password(self, password):self.password_hash = generate_password_hash(password) def verify_password(self, password):return check_password_hash(self.password_hash, password) def __repr__(self):return ’<User %r>’ % self.name@login_manager.user_loaderdef load_user(user_id): return User.query.get(int(user_id))
这是form:
class RegisterForm(FlaskForm): email = StringField(’Email’, validators=[Required(), Length(1, 64), Email()]) username = StringField(’Username’, validators=[Required(), Length(1, 16), Regexp(’^[A-Za-z][1-9]*$’, message=’first is a string and the second must be a int’)]) password = PasswordField(’Password’, validators=[Required(), Length(1, 64)]) password2 = PasswordField(’Config Password’, validators=[Required(), Length(1, 64)]) submit = SubmitField(’Register’) def validata_email(self, field):if User.query.filter_by(email=field.data).first(): raise ValidationError(’Email is already register’) def validata_username(self, field):if User.query_by(username=field.data).first(): raise ValidationError(’User is already in use’)
这个是视图函数:
@auth.route(’/register’, methods=[’GET’, ’POST’])def register(): form = RegisterForm() if form.validate_on_submit():user = User(name=form.username.data, email=form.email.data, password=form.password.data)db.session.add(user)login_user(user, True)flash(’Register successful!!’)return render_template(’user.html’) return render_template(’register.html’, form=form)
现在的情况是,当用户注册成功时会自动登录跳转到下面的页面,但是跳转后继续请求会出错,如果在注册中去掉登录,就没问题了,不知道为什么


问题解答
回答1:user_id找不到時為None,執行int(user_id)發生錯誤
試著把這段
def load_user(user_id): return User.query.get(int(user_id))
改成
def load_user(user_id): try: output = User.query.get(int(user_id))return(output) except:return(None)
相关文章:
1. android - java tm platform se binary 占用很多内存2. Java中的多人游戏。将客户端(玩家)连接到其他客户端创建的游戏3. javascript - 关于js高级程序中的问题4. javascript - CSS图片轮播显示问题5. mysql 怎么做到update只更新一行数据?6. javascript - 项目用IE浏览器打开修改前端内容,后台数据修改了,但是前端页面内容不变,用谷歌浏览器测试前端页面可以刷新,求大神解决。7. thinkPHP5中获取数据库数据后默认选中下拉框的值,传递到后台消失不见。有图有代码,希望有人帮忙8. python - Mac 安装 MySQLdb时 报错,所有过程都按照网上说的做的,还是报错,求大神帮助9. datetime - Python如何获取当前时间10. 现在大家是用Mysql还是mariaDb?

网公网安备