Python框架Flask开发用户登录、注册、校验功能,存储到MySQL数据库

2024-04-09 09:05 Python框架Flask开发用户登录、注册、校验功能,存储到MySQL数据库已关闭评论

在Python Flask框架中开发用户登录、注册、校验等功能,并将用户数据存储到MySQL数据库,一般会涉及以下几个核心步骤:

1. 初始化项目与依赖

首先,确保安装了Flask和其他必要库,如Flask-SQLAlchemy(用于连接MySQL数据库)和Flask-WTF(用于处理表单):

pip install flask flask-sqlalchemy flask-wtf mysqlclient

2. 创建Flask应用和配置数据库连接

from flask import Flask, render_template, redirect, url_for, request
from flask_sqlalchemy import SQLAlchemy
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Email, EqualTo

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your-secret-key'  # 用于加密表单令牌
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:password@localhost/dbname'
db = SQLAlchemy(app)

# 初始化数据库模型,例如 User 模型
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    password_hash = db.Column(db.String(128), nullable=False)

# ... (更多关于模型的字段和方法定义)

3. 创建用户注册表单

class RegistrationForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired()])
    email = StringField('Email', validators=[DataRequired(), Email()])
    password = PasswordField('Password', validators=[DataRequired()])
    confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')])
    submit = SubmitField('Sign Up')

# 注册视图函数
@app.route('/register', methods=['GET', 'POST'])
def register():
    form = RegistrationForm()
    if form.validate_on_submit():
        # 将密码哈希存储,不存储明文密码
        hashed_password = bcrypt.generate_password_hash(form.password.data).decode('utf-8')
        new_user = User(username=form.username.data, email=form.email.data, password_hash=hashed_password)
        db.session.add(new_user)
        db.session.commit()
        return redirect(url_for('login'))
    return render_template('register.html', form=form)

4. 用户登录表单和视图函数

class LoginForm(FlaskForm):
    email = StringField('Email', validators=[DataRequired(), Email()])
    password = PasswordField('Password', validators=[DataRequired()])
    submit = SubmitField('Log In')

# 登录视图函数
@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        user = User.query.filter_by(email=form.email.data).first()
        if user and bcrypt.check_password_hash(user.password_hash, form.password.data):
            # 登录成功,使用 Flask-Login 或类似库进行会话管理
            login_user(user)
            return redirect(url_for('home'))  # 跳转到主页或其他受保护的页面
        else:
            flash('Invalid email or password')  # 显示错误信息
    return render_template('login.html', form=form)

5. 数据库迁移与模型同步

在实际项目中,你可能还需要使用Alembic进行数据库迁移,确保模型变化时数据库表结构也能同步更新。

6. 错误处理与用户验证逻辑

上述代码简化了验证逻辑,实际开发中应增加更多的验证,如邮箱格式验证、用户名唯一性验证等。同时,登录失败时应当处理好异常,避免泄露过多信息。

7. HTML模板和表单渲染

创建HTML模板文件,如register.htmllogin.html,用来呈现表单并与用户交互。

8. 安全措施

为了提高安全性,还需要对密码进行哈希存储,这里使用了bcrypt库。在实际场景中,可能还需要考虑使用CSRF保护、HTTPS、二次验证等额外安全措施。

请根据实际情况调整代码,补充缺少的部分,并注意在生产环境中使用合适的数据库连接池、错误处理和日志记录策略。

当前文章价值4.62元,扫一扫支付后添加微信提供帮助!(如不能解决您的问题,可以申请退款)

你可能感兴趣的文章

来源:每日教程每日一例,深入学习实用技术教程,关注公众号TeachCourse
转载请注明出处: https://www.teachcourse.cn/3222.html ,谢谢支持!

资源分享

分类:python 标签:, ,
ubuntu中创建Python虚拟环境 ubuntu中创建Python虚拟环境
ubuntu中使用pipenv创建新项目虚拟环境示例 ubuntu中使用pipenv创建新项目虚
Android 开发之深入理解安卓调试桥各种错误解决办法 Android 开发之深入理解安卓调试
ubuntu重新安装workpress ubuntu重新安装workpress

评论已关闭!