如何使用 flask-login 进行日志记录?
How to get working logging with flask-login?
我正在 Python 开发一个应用程序,其中包括记录用户。我正在使用烧瓶包括。 SQLAlchemy、烧瓶登录和烧瓶形式。这些是我用于注册和登录的代码(在模块 routes.py 中):
@app.route('/register', methods=['GET', 'POST'])
def register():
register_form = RegistrationForm(request.form)
if request.method == 'POST':
if register_form.validate():
email = request.form.get('email')
password = request.form.get('password')
username = request.form.get('username')
existing_user = User.query.filter_by(email=email).first()
if existing_user is None:
user = User(username=username, email=email,
password=bcrypt.generate_password_hash(password))
db.session.add(user)
db.session.commit()
login_user(user)
return redirect(url_for('home'))
flash('A user already exists with that email address.')
return redirect(url_for('register'))
return render_template('/register.html',
title='Create an Account',
form=RegistrationForm())
@app.route('/login', methods=['GET', 'POST'])
def login():
login_form = LoginForm(request.form)
if request.method == 'POST':
if login_form.validate():
email = request.form.get('email')
password = request.form.get('password')
user = User.query.filter_by(email=email).first()
if user:
if user.check_password(password=password):
login_user(user)
next = request.args.get('next')
return redirect(next or url_for('home'))
flash('Invalid username/password combination')
return redirect(url_for('login'))
return render_template('login.html',
form=LoginForm())
可以看出,它们的写法类似。这是我的记录器函数(在模块 models.py 中):
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
注册按预期工作,但登录时却不是这样。当我使用有效的电子邮件和密码时(保存在 sql 中工作正常),我的网络应用程序总是闪烁 'Invalid username/password combination'.
有人可以帮忙吗?
我找到了解决办法。我的登录表单如下所示:
class LoginForm(FlaskForm):
email = StringField('Email',
validators=[DataRequired(), Email()])
password = PasswordField('Password',
validators=[DataRequired()])
confirm_password = PasswordField(' Confirm Password',
validators=[DataRequired(), EqualTo('password')])
remember = BooleanField('Remember Me')
submit = SubmitField('Log In')
我复制了我的注册表,但忘记删除 confirm_password 字段。登录时未确认,不满足字段条件 --> form.validate_on_submit为false.
我正在 Python 开发一个应用程序,其中包括记录用户。我正在使用烧瓶包括。 SQLAlchemy、烧瓶登录和烧瓶形式。这些是我用于注册和登录的代码(在模块 routes.py 中):
@app.route('/register', methods=['GET', 'POST'])
def register():
register_form = RegistrationForm(request.form)
if request.method == 'POST':
if register_form.validate():
email = request.form.get('email')
password = request.form.get('password')
username = request.form.get('username')
existing_user = User.query.filter_by(email=email).first()
if existing_user is None:
user = User(username=username, email=email,
password=bcrypt.generate_password_hash(password))
db.session.add(user)
db.session.commit()
login_user(user)
return redirect(url_for('home'))
flash('A user already exists with that email address.')
return redirect(url_for('register'))
return render_template('/register.html',
title='Create an Account',
form=RegistrationForm())
@app.route('/login', methods=['GET', 'POST'])
def login():
login_form = LoginForm(request.form)
if request.method == 'POST':
if login_form.validate():
email = request.form.get('email')
password = request.form.get('password')
user = User.query.filter_by(email=email).first()
if user:
if user.check_password(password=password):
login_user(user)
next = request.args.get('next')
return redirect(next or url_for('home'))
flash('Invalid username/password combination')
return redirect(url_for('login'))
return render_template('login.html',
form=LoginForm())
可以看出,它们的写法类似。这是我的记录器函数(在模块 models.py 中):
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
注册按预期工作,但登录时却不是这样。当我使用有效的电子邮件和密码时(保存在 sql 中工作正常),我的网络应用程序总是闪烁 'Invalid username/password combination'.
有人可以帮忙吗?
我找到了解决办法。我的登录表单如下所示:
class LoginForm(FlaskForm):
email = StringField('Email',
validators=[DataRequired(), Email()])
password = PasswordField('Password',
validators=[DataRequired()])
confirm_password = PasswordField(' Confirm Password',
validators=[DataRequired(), EqualTo('password')])
remember = BooleanField('Remember Me')
submit = SubmitField('Log In')
我复制了我的注册表,但忘记删除 confirm_password 字段。登录时未确认,不满足字段条件 --> form.validate_on_submit为false.