Flask框架(2)--编写简单的用户注册--登录场景
为了更好的理解web前后端的工作业务逻辑:本笔记记录用flask框架编写的一个最初级的代码实现简单的用户注册,登录场景:
初次进入首页,提示--游客,欢迎参观,有登录和注册选项,
登录成功后的用户,会显示欢迎(比如用admin用户登录):
页面代码如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> {% if session.name %} <h3>您好,欢迎{{ session.name }}!</h3> {% else %} <h3>游客,欢迎参观<br><a href="login">请登录</a><br><a href="signin">请注册</a></h3> {% endif %} </body> </html>
点击登录进入登录页面
填写错误的用户名或密码会有错误提示
页面代码如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>login</title> </head> <body> <form action="/login" method="POST"> <table> <tr> <th colspan="2">用户登录</th> </tr> <tr> <th>用户名</th> <td> <input name="username" type="text" value=""> </td> </tr> <tr> <th>密码</th> <td> <input name="passwd" type="text" value=""> </td> </tr> <tr> <th colspan="2"> <input name="login" type="submit" value="登录"> </th> </tr> <tr> <th colspan="2"> 没有账号点击<a href="signin">注册</a> </th> </tr> 没有账号点击<a href="signin">注册</a> </table> {{ msg }} </form> </body> </html>
没有账号可点击注册进入注册页面
注册信息输入不完整会有相关提示:
页面代码如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>注册</title> </head> <body> <form action="/signin" method="POST"> <table> <tr> <th colspan="2">用户注册</th> </tr> <tr> <th>用户名</th> <td> <input name="username" type="text" value=""> </td> </tr> <tr> <th>密码</th> <td> <input name="passwd" type="text" value=""> </td> </tr> <tr> <th>确认密码</th> <td> <input name="passwd1" type="text" value=""> </td> </tr> <tr> <th colspan="2"> <input name="login" type="submit" value="注册"> </th> </tr> </table> {{ msg }} </form> </body> </html>
注册成功后会跳转至注册成功页面,点击立即登录可跳转至登录页面:
框架代码如下:
# -*- coding: utf-8 -*- # @Time : 2019/4/28 20:39 # @Author : lc from flask import Flask, render_template, request, session, redirect, url_for from Flask2.sqlite import sqlite_insert, sqlite_select import sqlite3 # 引入数据库 app = Flask(__name__) # 创建一个Flask实例 app.secret_key = 'abcde11ef' # 设置session密钥 '''根路由支持POST和GET请求,进入index页面''' @app.route('/', methods=['GET', 'POST']) def hello_world(): return render_template('index.html') '''注册支持POST和GET请求,进入signin页面,合法的注册数据写入数据库''' @app.route('/signin', methods=['GET', 'POST']) def signin(): method = request.method # 获取请求方式 if method == 'GET': return render_template('signin.html') else: user_name = request.form.get('username') password = request.form.get('passwd') password1 = request.form.get('passwd1') if user_name and password and password1: # 判断必填项 if password == password1: sqlite_insert(user_name, password) # 实例化数据库插入方法 succ = "注册成功" return render_template('signin_success.html', msg=succ) else: err = "登录失败,两次密码输入不一致" # 返回HTML可以添加模板语言,可以放在body里面用{{}}引入 return render_template('signin.html', msg=err) else: err = "请输入完整的注册信息" return render_template('signin.html', msg=err) # '''登录支持POST和GET请求,进入login页面,合法发起请求后查询数据库进行数据匹配''' @app.route('/login', methods=['GET', 'POST']) def login(): method = request.method # 获取请求方式 if method == 'GET': return render_template('login.html') else: username = request.form.get('username') password = request.form.get('passwd') result = sqlite_select(username, password) # 实例化数据库查询方法 print(result) if result: if username == result[1] and password == result[2]: session['name'] = result[1] # 设置session值 return render_template('index.html') else: err = "登录失败,用户名或密码错误" # 返回HTML可以添加模板语言,可以放在body里面用{{}}引入 return render_template('login.html', msg=err) if __name__ == '__main__': app.run()
ps:用户注册后的密码会加密后再存入数据库,可调用以下方法对密码进行加密
import hashlib def hash_code(pwd): md5=hashlib.md5() # 获取MD5对象 md5.update(pwd.encode('utf-8')) #将传入的pwd编码后,更新MD5的状态 return md5.hexdigest() #返回十六进制的MD5码 if __name__ == '__main__': print(hash_code('123456'))
# 输出结果:e10adc3949ba59abbe56e057f20f883e
但行好事,莫问前程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了