丈夫志四海,万里犹比邻。这篇文章主要讲述Flask框架实现注册加密功能详解Flask企业课学习相关的知识,希望能为你提供帮助。
文章目录
- ??一.前言??
- ??二.werkzeug密码散列值??
- ??三.后端详解??
- ??3.1准备??
- ??3.2创建数据库??
- ??3.4 register视图函数??
- ??3.5 使用Flaskform编写register表单代码??
- ??四,前端??
- ??4.1使用flask-bootstrap模板完成register.html页面渲染代码??
- ??五.效果图??
涉及的内容:
1.能够综合运用Flask框架的flask-bootstrap模板 、Flaskform表单和flask-sqlalchemy数据库框架实现基本注册功能
2.能够使用werkzeug密码散列计算实现注册的密码安全性
二.werkzeug密码散列值密码散列函数是一种 单向散列函数 ,将任意长度的消息压缩到某一固定长度的 消息摘要 ,一个理想的密码散列函数应该有四个主要的特性:对于任何一个给定的消息,它都很容易就能运算出散列数值。
werkzeug中的security模块实现了密码散列值的计算。
??
?1.from werkzeug.security import ?
??check_password_hash,generate_password_hashgenerate_password_hash函数的输入为原始密码,返回密码散列值的字符串形式,供存入用户数据库。
check_password_hash数据库中存放的密码hash值,和用户输入的密码,如果一致,返回True,如果不一致,返回False。
用户前端输入,传值给后端,密码字段传入password函数,执行generate_password_hash
方法,返回密码散列值的字符串形式。函数 check_password_hash 检查给出的hash密码与传入的密码是否相符。如果一致,返回True,如果不一致,返回False。
三.后端详解 3.1准备引入werkzeug中的security模块,
from werkzeug.security import check_password_hash,generate_password_hash
引入FlaskForm模块
from flask_wtf import Form, FlaskForm
引入SQLAlchemy模块
from flask_sqlalchemy import SQLAlchemy
3.2创建数据库先创建一下我们的数据库:
class Role(db.Model):
__tablename__ = roles
id = db.Column(db.Integer,primary_key = True)
name = db.Column(db.String(64),unique=True)
users = db.relationship(User, backref=role)
def __repr__(self):
return < Role %r> % self.name
class User(db.Model):
__tablename__ = users
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True)
password_hash = db.Column(db.String(128))
role_id = db.Column(db.Integer, db.ForeignKey(roles.id))
def __repr__(self):
return < User %r> % self.name
如下:
3.4 register视图函数
if user is None:
user = User(username=form.name.data,password=form.password.data)
如果传入的值不为空的话,将前端传递的username和password作为参数传入User()
User()方法处理加密后的字段返回赋值给user。
存入数据库:
db.session.add(user)
将known赋值为False,响应给前端
session[known] = False
前端输出提示信息:注册成功
flash("注册成功")
3.5 使用Flaskform编写register表单代码
class RegisterForm(FlaskForm):
name = StringField(Username, validators=[InputRequired(),Length(min=8,max=16)])
password=PasswordField(New Password,validators=[InputRequired(),
Length(min=8,max=16),
EqualTo(confirm,message=Passwords must match)])
confirm = PasswordField(Repeat Password)
submit = SubmitField(submit)
上述代码解释:
这块比较简单一些,作用就是规定了name表单的最小输入为8个字符,最大为16个字符,password同理。
截图如下:
四,前端 4.1使用flask-bootstrap模板完成register.html页面渲染代码
% extends "base.html"%
% import "bootstrap/wtf.html"as wtf %
% block title %Flask% endblock %
% block page_content %
< div>
< h1> 请登记< /h1>
% if not known %
< p> Pleased to meet you!< /p>
% else %
< p> Happy to see you again!< /p>
% endif %
< /div>
wtf.quick_form(form)
% endblock %
之前后端写过,传值到前端 known,如果通过的话赋值 known为False,前端这里,如果判断为当前为数据库里存在的用户,会输出Happy to see you again!
五.效果图效果图如下:
【Flask框架实现注册加密功能详解Flask企业课学习】
推荐阅读
- UML2
- python 列表
- 持续更新常用/易错Latex符号介绍
- 端口扫描工具nmap核心使用方法
- 闰年的判断
- 端口扫描工具mascan核心使用
- Linux curl发送post请求携带form参数(Content-Type: application/x-www-form-urlencoded)
- Java中Socket 实现最简单的客户端与服务端通信
- docker环境搭建