Python Flask: 实现用户登录功能
来自CloudWiki
创建模板文件
在templates目录下创建login.html模板文件:
{% extends 'layout.html' %} {% block body %} <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> <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 %}
实现登录功能
登录函数login()
# 用户登录 @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')
控制台函数dashboard()
用于登录之后模拟控制台:
# 用户登录 @app.route('/dashboard', methods=['GET', 'POST']) def dashboard(): return "欢迎光临"