技术标签: python_flask python 登录 mysql flask
该篇主要介绍使用flask如何实现用户注册登录功能,使用SQLAlchemy操作数据库,密码进行动态加密解密验证,以及基本登录逻辑和表单提交,项目中用到的东西前几篇都有介绍,如有不足请留言指出谢谢
登录页面 login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<h1>登录页面</h1>
<form action="{
{ url_for('login') }}" method="post">
用户名<input name="userName" type="text">
密码<input name="passWord" type="password">
<button type="submit">提交</button>
</form>
<button>没有用户名?去<a href="{
{ url_for('register') }}">注册</a> </button>
</body>
</html>
注册页面 register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册</title>
</head>
<body>
<h1>注册页面</h1>
<form action="{
{ url_for('registerAdd') }}" method="post">
用户名<input name="userName" type="text">
密码<input name="passWord" type="password">
<button type="submit">提交</button>
</form>
</body>
</html>
注册成功页面 index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<h1>登录成功!!!!!!</h1>
</body>
</html>
app.py 登录逻辑代码
from flask import Flask, render_template, request
from sqlConfig import DBSession, User
from werkzeug.security import generate_password_hash, check_password_hash
app = Flask(__name__)
@app.route('/')
def hello_world():
# 访问localhost 跳转到登录页面
return render_template("login.html")
# 注意这里的methods = ['POST','GET] 必须要加,不然会报错方法找不到错误
# 因为这里是表单提交,会带有数据过来,不指定的话就会报错
@app.route('/login', methods=['POST', 'GET'])
def login():
# 获取表单提交的用户名密码
username = request.form['userName']
password = request.form['passWord']
# 初始化DBSession对象
session = DBSession()
# 查找用户名对应的第一个用户
user = session.query(User).filter_by(userName=username).first()
# 判断用户名 和解密后的密码是否一致 如果一致那么跳转到index.html
if username == user.userName and check_password_hash(str(user.passWord), str(password)) == True:
return render_template("index.html", userName=username)
@app.route('/register')
def register():
# 跳转到register.html 注册页面
return render_template("register.html")
@app.route('/registerAdd', methods=['POST', 'GET'])
def registerAdd():
# 获取用户名密码 get 方法获取方式为 request.args.get('userName')
# 或者 request.get_data()
user_name = request.form['userName']
pass_word = request.form['passWord']
# 动态加盐 加密密码
pass_word = generate_password_hash(pass_word)
# 创建用户 添加到数据库中
user = User(userName=user_name, passWord=pass_word)
# 实例化DBSession对象
session = DBSession()
session.add(user)
session.commit()
# 注册成功后跳转到登录页面
return render_template("login.html")
if __name__ == '__main__':
app.run(host="0.0.0.0", port=80, debug=False)
SQLAlchemy 数据库配置
# !/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/6/16 9:48
# @Author : 宁宁小可爱
# @File : sqlConfig.py
# @Software: PyCharm
from sqlalchemy import Column, String, INTEGER, create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
"""
说明:
@ 这里的create_engine进行的操作是创建数据库连接,填写参数格式如下:
@ '数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名'
@ 这里使用了.format函数,这就是个占位符,在format中按顺序填写就好,也可以指定编号比如{1}
"""
DATABASENAME = 'test'
IPADDRESS = 'localhost'
engine = create_engine("mysql+pymysql://root:root@{}:3306/{}".format(IPADDRESS, DATABASENAME))
"""
说明:
@ 这里的sessionmaker是一个工厂类,按照我们创建的engine绑定了数据库引擎
@ 当我们使用这个Session的时候都会创建一个绑定引擎的Session,通过Session操作数据库
"""
DBSession = sessionmaker(bind=engine)
# 创建一个父类数据库
Base = declarative_base()
"""
说明:
@ 以下代码会创建flask数据库中user表的映射关系
通过继承父类,指定字段类型表名将会建立映射关系
"""
class User(Base):
__tablename__ = 'user' # 指定表名字为 user
# 主键id, 自增, Integer类型
id = Column(INTEGER, primary_key=True, autoincrement=True)
# userName字段 varchar类型 限制45 不为空
userName = Column(String(45), nullable=False)
# passWord字段, varchar类型 限制45 不为空
passWord = Column(String(45), nullable=False)
SQLAlchemy对应的数据库表 test数据库下的user表
上面 class配置要和数据库保持一致,不然会报错
文章浏览阅读734次。1.通用指令AT+CGMI厂家认证请求,返回模块厂家信息AT+CGMM模式认证请求,返回模块使用频段AT+CGMR修正认证请求,返回软件版本AT+CGSN查看产品IMEI序列号AT+CSCS选择TE特性设置AT+WPCS选择ME特性设置AT+CIMIIMSI认证请求,返回SIM卡的IMSIAT+CCID获得_at命令集
文章浏览阅读769次。数学建模单人速通_一个人把数学建模比赛打完
文章浏览阅读251次,点赞4次,收藏7次。(本题为洛谷的P1093)
文章浏览阅读310次。http://tieba.baidu.com/p/2243715028在Ubuntu的中文系统中自带了中文输入法,通过Ctrl+Space可切换中英文输入法。这里我们主要说下Ubuntu英文系统中,中文输入法的安装。安装输入法的第一步,是安装语言包。我们选择System Settings-->LanguageSupport-->Install/Remove Languages,卸载ibus
文章浏览阅读549次,点赞6次,收藏21次。Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
文章浏览阅读459次,点赞2次,收藏3次。自用面试题
文章浏览阅读7.3k次,点赞2次,收藏9次。简介:三种md5加密,主要区别在于将md5加密后的byte数组转换为16进制字符串的方式。1.第一种,使用bigInteger进行转换 public static String md5Encrypt(String src){ try { //获取md5算法 MessageDigest md5Digest = MessageDige_md5转16进制
文章浏览阅读2.1k次。如何在string.xml的内容中添加空格 在strings.xml定义文字时,空格以 " " 表示_string.xml文件添加空格
文章浏览阅读957次。NET 6之前,在Linux服务器上安装 libgdiplus 即可解决,libgdiplus是System.Drawing.Common原生端跨平台实现的主要提供者,是开源mono项目。需要注意的是apt-get update 这一步是必不可少的,不然会报找不到 libgdiplus。而且因为是官方镜像,用的是Debain10构建的docker镜像,在编译运行构建时会非常慢。说明当前用户权限不够,所以要使用chmod,将wwwroot文件夹授权:chmod 777 wwwroot。_psd access to the path '\xx.psd' is denied. file.copy overwrite
文章浏览阅读7.4k次,点赞3次,收藏22次。光电池和光电二极管的区别 光电池概述 光电池(photovoltaic cell,注意photocell一般指光敏电阻),是一种在光的照射下产生电动势的半导体元件。它是是能在光的照射下产生电动势的元件。用于光电转换、光电探测及光能利用等方面。 光电池是能在光的照射下产生电动势的元件。用于光电转换、光电探测及光能利用等方面。人们最早发现和应用的是硒光电池。它的原理是硒在光作用下产生电子被电极收集而产生电动势。后来又发现和应用了各种半导体材料的光电池,如硅光电池、硫化银电池等..._硅光电池
文章浏览阅读345次。3、找到msf的工具目录,进入smb_ms17_101漏洞利用模块,使用search ms17_010查看可用模块、使用show optionsc查看可支持命令与参数。1、nessus扫描目标系统的IP拿到系统漏洞信息(存在ms11_030、ms17_010、ms16_047漏洞),本教程以ms17_010为例讲解。serach vce:VCE-2017-8464 type:exploit # 查找漏洞VCE-2017-8464的利用方法与模块。modules:存储metasploit的模块文件。_sm17-010
文章浏览阅读3.5k次,点赞112次,收藏106次。产品主要面向于我国党政军、企事业单位、教育机构,以及普通的企业型用户,着重解决客户在信息化基础建设过程中,服务端基础设施的安装部署、运行维护、应用支撑等需求。以其极高的可靠性、持久的可用性、优良的可维护性,在用户实际运营和使用过程中深受好评,是一款体现当代主流Linux服务器操作系统发展水平的商业化软件产品。添加磁盘挂载点,创建/boot ,剩下的其余分配给根目录 OOK,点击完成。开始安装,需要等待 15分钟左右了,可以活杯茶 小憩一下下。选择本地标准磁盘,存储配置选择自定义后点击完成。_uos server 20 1060a