flask实战-用户登录注册系统+密码动态加密(5-实战篇-转载)

该篇主要介绍使用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. 效果展示

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

转载自:https://blog.csdn.net/weixin_44232093/article/details/106782281

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值