为了更好的理解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(''))

# 输出结果:e10adc3949ba59abbe56e057f20f883e

最新文章

  1. 使用Swift打造动态库SDK和DemoAPP时所遇到的(Xcode7.3)
  2. C++ 系列:C++ 基础 001
  3. CSS3实现Loading效果
  4. 基础-训练营-day1~day5
  5. 2016 ACM/ICPC Asia Regional Shenyang Online 1009/HDU 5900 区间dp
  6. JSP MVC
  7. php发送get、post请求的几种方法
  8. 《Dive into Python》Chapter 2 and Chapter 3 笔记
  9. kettle介绍
  10. python︱模块加载(pip安装)以及pycharm安装与报错解决方式
  11. MySQL Server 的安装方法及简要步骤
  12. flask之基础知识点
  13. JAVA学习笔记系列3-JVM、JRE和JDK的区别
  14. C++中的memset、zeroMemory和={0}操作( 转)
  15. Linux基础命令---traceroute追踪路由
  16. 移动端 - APP测试要点
  17. 在线创建springboot项目
  18. POST、GET请求中文参数乱码问题
  19. SSH执行远程命令和传送数据
  20. POJ 1159 Palindrome(最长公共子序列)

热门文章

  1. Git - Q
  2. HDU 6162 - Ch’s gift | 2017 ZJUT Multi-University Training 9
  3. MyBatis 接口注解方式代替mapper.xml
  4. 通过反射获取DataSource里数据源的账号密码
  5. About &amp; Ideas &amp; Queries
  6. python ros 警报上报
  7. Hbuild在线云ios打包失败,提示BuildConfigure Failed 31013 App Store 图标 未找到 解决方法
  8. chrome-添加JSON-handler插件
  9. 火狐调试工具-DevTools
  10. Python数据预处理(sklearn.preprocessing)—归一化(MinMaxScaler),标准化(StandardScaler),正则化(Normalizer, normalize)