flask框架实现登录注册操作

一、使用python连接数据库

        对登录和注册的前提是要对所产生的数据进行保存和解读,这时候我们就需要把数据保存到数据库里面,先要确保电脑里面拥有数据库,在新文件中引用SQL alchemy,单独在文件夹下面创建一个新的py文件,存放我们的连接代码,要记得名字和密码都要用自己设置的,不然会报错:

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()
HOSTNAME = '127.0.0.1'
PORT = '3306'
USERNAME = 'root'
PASSWORD = '123456'
DATABASE = 'daimakuangjiashixian'
DB_URI = "mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8".format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE)
SQLALCHEMY_DATABASE_URI = DB_URI

          再在主文件中引用本py文件

import config

二、实现注册功能

        在这里我们要使用python中的wtforms插件库,它能够做表单验证,将用户提交上来的数据进行验证是否符合系统要求,使用自己的代码进行约束和验证是否符合自己的约束,创建一个class,对注册列表进行创建,有对输入的密码进行确认:

class RegisterForm(wtforms.Form):
    email = wtforms.StringField( validators=[Email(message='邮箱格式错误')])
    capcha = wtforms.StringField(validators=[Length(min=4,max=4,message='验证码格式错误')])
    username = wtforms.StringField(validators=[Length(min=3,max=20,message='用户名长度必须在3到20个字符之间')])
    password = wtforms.StringField(validators=[Length(min=6,max=20,message='密码长度必须在6到20个字符之间')])
    password_confirm = wtforms.StringField(validators=[EqualTo('password',message='两次输入的密码不一致')])

        我们使用get的请求方法,去读取前端得到的数据,再以此存入我们的数据库,若表单读取成功,我们将进行下一步登录,若没有成功,则我们再次回到此页面,重新来:

def register():
    # 如果请求方法为GET,则返回注册页面
    if request.method == 'GET':
        return render_template('register.html')
    else:
        form = RegisterForm(request.form)
        # 如果表单验证成功,则创建用户模型,并将数据添加到数据库
        if form.validate():
            email = form.email.data
            username = form.username.data
            password = form.password.data
            user = UserModel(email=email, username=username, password=generate_password_hash(password))
            db.session.add(user)
            db.session.commit()
            # 注册成功后,跳转到登录页面
            return redirect(url_for('auth.login'))
        else:
            # 如果表单验证失败,则打印错误信息,并跳转到注册页面
            print(form.errors)
            return redirect(url_for('auth.register'))

        我们在创建一个新的model文件,写入我们存入数据库时需要的代码: 

class UserModel(db.Model):
    # 表名
    __tablename__ = 'user'
    # 主键
    id = db.Column(db.Integer, primary_key=True,autoincrement=True)
    # 用户名
    username = db.Column(db.String(100), nullable=False)
    # 密码
    password = db.Column(db.String(200), nullable=False)
    # 邮箱
    email = db.Column(db.String(100), nullable=False, unique=True)
    # 加入时间
    join_time = db.Column(db.DateTime, default=datetime.now)

三、实现登录功能

        做完注册的功能,登录的功能就不会太难,只是去读取存入数据库的代码是否为正确的,这里我们也是用的是get方法,使用get在数据库中查找数据是否存在,登录成功后浏览器会进行保存账号密码,对账户的密码使用session函数进行加密,若没有登录成功将会继续留在本页面:

def login():
    if request.method == 'GET':
        return render_template('login.html')
    else:
        form = LoginForm(request.form)
        if form.validate():
            email = form.email.data
            password = form.password.data
            user = UserModel.query.filter_by(email=email).first()
            if not user:
                print('用户不存在')
                return redirect(url_for('auth.login'))
            if check_password_hash(user.password, password):
                session['user_id'] = user.id
                return redirect('/')
            else:
                print('密码错误')
                return redirect(url_for('auth.login'))
        else:
            print(form.errors)
            return redirect(url_for('auth.login'))

四、项目实现

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值