-
自定义字段验证函数
class RegisterForm(FlaskForm): ... def validate_username(self, field): user = User.query.filter(User.username == field.data).first() if user: raise ValidationError('该用户名已注册,请选用其他名称注册') def validate_email(self, field): user = User.query.filter(User.email == field.data).first() if user: raise ValidationError('该邮箱已注册,请选用其他邮箱注册') -
加密存储密码
from werkzeug.security import generate_password_hash, check_password_hash class User(db.Model): ... @property def password(self): raise AttributeError('你瞅啥?!密码不可读') @password.setter def password(self, password): # 加密保存密码 self.password_hash = generate_password_hash(password) # 密码校验,True:校验成功,False:校验失败 def verify_password(self, password): return check_password_hash(self.password_hash, password)
用户登录退出
-
登录校验逻辑
@user.route('/login/', methods=['GET', 'POST']) def login(): form = LoginForm() if form.validate_on_submit(): u = User.query.filter(User.username == form.username.data).first() if not u: flash('无效的用户名') elif not u.confirmed: flash('账户尚未激活,请激活后再登录') elif not u.verify_password(form.password.data): flash('无效的密码') else: flash('登录成功') return redirect(url_for('main.index')) return render_template('user/login.html', form=form) -
flask-login扩展
- 说明:它是一个专门用来管理用户登录退出的扩展库,使用非常方便。
- 安装:
pip install flask-login - 使用:
# 第一步:添加扩展 from flask_login import LoginManager login_manager = LoginManager() def init_extensions(app): ... login_manager.init_app(app) # 指定登录端点 login_manager.login_view = 'user.login' # 设置提示信息 login_manager.login_message = '登录后才可访问' # 第二步:让模型类类基础子UserMixin类,以便拥有状态相关方法 from flask_login import UserMixin class User(UserMixin, db.Model): ... # 第三步:实现回调函数(根据用户id返回用户对象) @login_manager.user_loader def load_user(uid): return User.query.get(uid)- 总结
