flask 登陆注册

22 篇文章 0 订阅
9 篇文章 0 订阅
from flask import Flask, request, redirect, make_response, render_template, session
from flask_sqlalchemy import SQLAlchemy
import pymysql
pymysql.install_as_MySQLdb()

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI']='mysql://root:123456@localhost:3306/flask'
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN']=True
app.config['SECRET_KEY']='521999'
db = SQLAlchemy(app)

# 创建实体类
class Register(db.Model):
    __tablename__ = 'register'   # 表名
    id = db.Column(db.Integer,primary_key=True)   # 注册表中字段
    username = db.Column(db.String(20),nullable=False,unique=True)
    password = db.Column(db.String(64),nullable=False)

# 将创建好的实体类映射到数据库
db.create_all()
# 删除数据实体类在数据路中的映射
# db.drop_all()

@app.route('/')
def index():
    return '登陆成功!!'

@app.route('/register',methods=['GET','POST'])
def register_views():
    # GET 刷新页面
    if request.method == 'GET':
        return render_template('register.html')
    else:
        # 通过post请求 获取页面信息
        uname = request.form.get('uname')
        upwd = request.form.get('upwd')
        upwd2 = request.form.get('upwd2')
        # 查询 用户名
        username = db.session.query(Register).filter_by(username=uname).first()
        # 判断用户名是否存在
        if username:
            return render_template('register.html',errors='用户名已存在')
        else:
            # 判断两次密码是否输入一直
            if upwd != upwd2:
                return render_template('register.html',errors='两次输入密码不一致')
            else:
                # 创建 Register 的实例 user
                user = Register()
                # 给属性赋值(相当于向表内填写数据)
                user.username = uname
                user.password = upwd
                # 向表中添加数据
                db.session.add(user)
                # 自动提交 上面已设置
                return '用户注册成功'

@app.route('/login', methods=['GET','POST'])
def login_views():
    if request.method == 'POST':
        # resp = redirect('/')
        # 设置 返回对象
        resp = make_response('登录成功!!!')
        # 获取数据
        uname = request.form.get('uname')
        upwd = request.form.get('upwd')
        # 数据库验证登录信息
        user = db.session.query(Register).filter_by(username=uname).first()
        #  密码是否与数据库中存储密码一致
        if user.password == upwd:
            # 添加session 对象
            session['uname']= uname
            # 是否设置保存密码
            if 'isSaved' in request.form:
                # 添加cookies对象
                resp.set_cookie('uname',uname,60*60*24*30)
                return resp
            else:
                return redirect('/')
        else:
            return render_template('login.html',errors='用户名或密码错误!')
    else:
        # 判断 是否是已登录状态
        if 'uname' in session:
            return redirect('/')
        else:
            # 判断是否曾记住密码
            if 'uname' in request.cookies:
                uname_1 = request.cookies['uname']
                session['uname']=uname_1
                return redirect('/')
            else:
                return render_template('login.html')

        return redirect('/')

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0')

login.html 模块

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/login" method="post">
    <p>
        用户名:<input type="text" name="uname">
    </p>
    <p>
        密&nbsp;&nbsp;码:<input type="password" name="upwd">
    </p>
    <p>
        记住密码:<input type="checkbox" name="isSaved" >
    </p>
    <p>
        <input type="submit" value="登录">
    </p>



</form>
</body>
</html>

register.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
{#        输出错误信息#}
        {% if errors %}
            alert('{{errors}}');
        {% endif %}
    </script>
</head>
<body>
<form action="/register" method="post">
    <p>
        用户名:<input type="text" name="uname">
    </p>
    <p>
        密&nbsp;&nbsp;码:<input type="password" name="upwd">
    </p>
    <p>
        密&nbsp;&nbsp;码:<input type="password" name="upwd2">
    </p>
    <p>
        <input type="submit" value="注册">
    </p>

</body>
</html>

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值