flask实战-用户登录注册系统+密码动态加密(5-实战篇)_登陆密码加密是动态的 如何做登录器-程序员宅基地

技术标签: python_flask  python  登录  mysql  flask  

该篇主要介绍使用flask如何实现用户注册登录功能,使用SQLAlchemy操作数据库,密码进行动态加密解密验证,以及基本登录逻辑和表单提交,项目中用到的东西前几篇都有介绍,如有不足请留言指出谢谢

1. 项目结构

在这里插入图片描述

2. HTML页面

登录页面 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>

2. 后台代码

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配置要和数据库保持一致,不然会报错
在这里插入图片描述

在这里插入图片描述

3. 效果展示

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44232093/article/details/106782281

智能推荐

详细的AT指令集_at命令集-程序员宅基地

文章浏览阅读734次。1.通用指令AT+CGMI厂家认证请求,返回模块厂家信息AT+CGMM模式认证请求,返回模块使用频段AT+CGMR修正认证请求,返回软件版本AT+CGSN查看产品IMEI序列号AT+CSCS选择TE特性设置AT+WPCS选择ME特性设置AT+CIMIIMSI认证请求,返回SIM卡的IMSIAT+CCID获得_at命令集

一个人把数学建模比赛打完 520特辑-程序员宅基地

文章浏览阅读769次。数学建模单人速通_一个人把数学建模比赛打完

P1093 [NOIP2007 普及组] 奖学金-程序员宅基地

文章浏览阅读251次,点赞4次,收藏7次。(本题为洛谷的P1093)

ubuntu&nbsp;安装搜狗拼音-程序员宅基地

文章浏览阅读310次。http://tieba.baidu.com/p/2243715028在Ubuntu的中文系统中自带了中文输入法,通过Ctrl+Space可切换中英文输入法。这里我们主要说下Ubuntu英文系统中,中文输入法的安装。安装输入法的第一步,是安装语言包。我们选择System Settings-->LanguageSupport-->Install/Remove Languages,卸载ibus

【创新课题】荔枝种植户种植决策系统:基于python爬虫荔枝电商销售数据可视化分析-程序员宅基地

文章浏览阅读549次,点赞6次,收藏21次。Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

面试Java后端-程序员宅基地

文章浏览阅读459次,点赞2次,收藏3次。自用面试题

随便推点

关于MD5加密中byte数组转换成16进制字符串的研究_md5转16进制-程序员宅基地

文章浏览阅读7.3k次,点赞2次,收藏9次。简介:三种md5加密,主要区别在于将md5加密后的byte数组转换为16进制字符串的方式。1.第一种,使用bigInteger进行转换 public static String md5Encrypt(String src){ try { //获取md5算法 MessageDigest md5Digest = MessageDige_md5转16进制

如何在string.xml的内容中添加空格_string.xml文件添加空格-程序员宅基地

文章浏览阅读2.1k次。如何在string.xml的内容中添加空格  在strings.xml定义文字时,空格以 " " 表示_string.xml文件添加空格

银河麒麟服务器v10 sp1 .Net6.0 上传文件错误 access to the path is denied_psd access to the path '\xx.psd' is denied. file.c-程序员宅基地

文章浏览阅读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一般指光敏电阻),是一种在光的照射下产生电动势的半导体元件。它是是能在光的照射下产生电动势的元件。用于光电转换、光电探测及光能利用等方面。  光电池是能在光的照射下产生电动势的元件。用于光电转换、光电探测及光能利用等方面。人们最早发现和应用的是硒光电池。它的原理是硒在光作用下产生电子被电极收集而产生电动势。后来又发现和应用了各种半导体材料的光电池,如硅光电池、硫化银电池等..._硅光电池

kali 使用 msf通过sm17_010漏洞拿到Windows shell_sm17-010-程序员宅基地

文章浏览阅读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

【Linux】统信服务器操作系统V20 1060a-AMD64 Vmware安装_uos server 20 1060a-程序员宅基地

文章浏览阅读3.5k次,点赞112次,收藏106次。产品主要面向于我国党政军、企事业单位、教育机构,以及普通的企业型用户,着重解决客户在信息化基础建设过程中,服务端基础设施的安装部署、运行维护、应用支撑等需求。以其极高的可靠性、持久的可用性、优良的可维护性,在用户实际运营和使用过程中深受好评,是一款体现当代主流Linux服务器操作系统发展水平的商业化软件产品。添加磁盘挂载点,创建/boot ,剩下的其余分配给根目录 OOK,点击完成。开始安装,需要等待 15分钟左右了,可以活杯茶 小憩一下下。选择本地标准磁盘,存储配置选择自定义后点击完成。_uos server 20 1060a

推荐文章

热门文章

相关标签