Flask 用户身份认证
项目代码见:GitHub - euansu123/FlaskMarket
前提条件
# flask-bcrypt 用户密码加密存储
pip install flask_bcrypt -i https://pypi.tuna.tsinghua.edu.cn/simple/
# flask提供的用户登录方法
pip install flask_login -i https://pypi.tuna.tsinghua.edu.cn/simple/
用户注册
后端方法:
@app.route("/register", methods=["GET", "POST"])
def register_page():
form = RegisterForm()
if form.validate_on_submit():
# 创建用户
user_to_create = User(username=form.username.data,
email_address=form.email.data,
password=form.password1.data)
db.session.add(user_to_create)
db.session.commit()
print("用户{username}创建成功".format(username=form.username.data))
return redirect(url_for('login_page'))
if form.errors != {}:
for err_msg in form.errors.values():
print("{}".format(err_msg))
flash(f"There was an error with creating account:{err_msg}", category="danger")
return render_template("register.html", form=form)
模型方法:
# @property 获取用户密码属性
# @password.setter 设置用户密码
from market import bcrypt
class User(db.Model, UserMixin):
id = db.Column(db.Integer(), primary_key=True)
username = db.Column(db.String(length=30), nullable=False, unique=True)
email_address = db.Column(db.String(length=50), nullable=False, unique=True)
password_hash = db.Column(db.String(length=60), nullable=False)
budget = db.Column(db.Integer(), nullable=False, default=1000)
items = db.relationship('Item', backref='owned_user', lazy=True)
@property
def password(self):
return self.password
@password.setter
def password(self, plain_text_password):
self.password_hash = bcrypt.generate_password_hash(plain_text_password).decode('utf-8')
前端页面: