基于flask的在线笔记共享管理系统【9】(注册与登录功能实现)

基于flask的在线笔记共享管理系统【9】(注册与登录功能实现)

1.注册:

代码实现


# 用户注册
@app.route('/register', methods=['GET', 'POST'])
def register():
    form = RegisterForm(request.form) # 实例化表单类
    if request.method == 'POST' and form.validate(): # 如果提交表单,并字段验证通过
        # 获取字段内容
        email = form.email.data
        username = form.username.data
        password = sha256_crypt.encrypt(str(form.password.data)) # 对密码进行加密

        db = MysqlUtil() # 实例化数据库操作类
        sql = "INSERT INTO users(email,username,password) \
               VALUES ('%s', '%s', '%s')" % (email,username,password) # user表中插入记录
        db.insert(sql)

        flash('您已注册成功,请先登录', 'success') # 闪存信息
        return redirect(url_for('login')) # 跳转到登录页面

    return render_template('register.html', form=form) # 渲染模板

HTML渲染

{% extends 'layout.html' %}

{% block body %}
   <div>
     <h1 class="title-center"> <img src = "../static/css/logo.png"  width="25%"  height="25%"  />  </h1>
     <h1 > <img src = "../static/css/denlu.png"  width="5%"  height="5%"  />  Cloud Notes <small> 欢迎使用 </small></h1>
<div class="content">
  <h1 class="title-center">用户注册</h1>
  {% from "includes/_formhelpers.html" import render_field %}
  <form method="POST" action="">
    <div class="form-group">
      {{render_field(form.email, class_="form-control")}}
    </div>
    <div class="form-group">
      {{render_field(form.username, class_="form-control")}}
    </div>
    <div class="form-group">
      {{render_field(form.password, class_="form-control")}}
    </div>
    <div class="form-group">
      {{render_field(form.confirm, class_="form-control")}}
    </div>
    <p><input type="submit" class="btn btn-primary" value="注册"></p>
  </form>
</div>
  <h1 class="title-center"> <img src = "../static/css/home2.png"  width="30%"  height="30%"  />  </h1>
    </div>
{% endblock %}

效果预览
在这里插入图片描述

2.登录

代码实现


# 用户登录
@app.route('/login', methods=['GET', 'POST'])
def login():
    if "logged_in" in session:  # 如果已经登录,则直接跳转到个人文章列表
        return redirect(url_for("dashboard"))

    if request.method == 'POST': # 如果提交表单
        # 从表单中获取字段
        username = request.form['username']
        password_candidate = request.form['password']
        sql = "SELECT * FROM users  WHERE username = '%s'" % (username) # 根据用户名查找user表中记录
        db = MysqlUtil() # 实例化数据库操作类
        result = db.fetchone(sql) # 获取一条记录
        if result : # 如果查到记录
            password = result['password']  # 用户填写的密码
            # 对比用户填写的密码和数据库中记录密码是否一致
            if sha256_crypt.verify(password_candidate, password): # 调用verify方法验证,如果为真,验证通过
                # 写入session
                session['logged_in'] = True
                session['username'] = username
                flash('登录成功!', 'success') # 闪存信息
                return redirect(url_for('dashboard')) # 跳转到控制台
            else:  # 如果密码错误
                error = '用户名和密码不匹配'
                return render_template('login.html', error=error) # 跳转到登录页,并提示错误信息
        else:
            error = '用户名不存在'
            return render_template('login.html', error=error)
    return render_template('login.html')

HTML渲染

{% extends 'layout.html' %}

{% block body %}
    <div>
        <h1 class="title-center"> <img src = "../static/css/logo.png"  width="25%"  height="25%"  />  </h1>
        <h1 > <img src = "../static/css/in.png"  width="10%"  height="10%"  />  Cloud Notes <small> 欢迎使用 </small></h1>
<div class="content" >
  <h1 class="title-center">用户登录</h1>
  <form action="" method="POST" onsubmit="return checkLogin()">
    <div class="form-group">
      <label>用户名</label>
      <input type="text" name="username" class="form-control" value={{request.form.username}}>
    </div>
    <div class="form-group">
      <label>密码</label>
      <input type="password" name="password" class="form-control" value="">
    </div>
    <button type="submit" class="btn btn-primary">登录</button>
  </form>
</div>
    <h1 class="title-center"> <img src = "../static/css/home2.png"  width="30%"  height="30%"  />  </h1>
    </div>
<script>
  function checkLogin(){
      var username = $("input[name='username']").val()
      var password = $("input[name='password']").val()
      // 检测用户名长度
      if ( username.length < 2  || username.length > 25){
        alert('用户名长度在2-25个字符之间')
        return false;
      }
      // 检测密码长度
      if ( username.length < 2  || username.length > 25){
        alert('密码长度在6-20个字符之间')
        return false;
      }
  }
</script>

{% endblock %}

效果
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DreamBoy@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值