跟着学习(新版):https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-v-user-logins
跟着学习(旧版):http://www.pythondoc.com/flask-mega-tutorial/userlogin.html
回顾上一章:https://blog.csdn.net/weixin_41263513/article/details/85010558
正片前的碎碎念
实际上上面两个链接跟着学习(新版旧版)都是出于同一位作者之手Miguel Grinberg,赞美大神!虽然旧版的代码可能有点问题,但好在是中文版啊!!而且下载的文件其实是属于新版的代码,所以下载之后会发现跟网页(旧版)里的对不上,现在要换一个网页学习啦,新版的我大概阅览了一下,能学到比旧版多的东西,但比较尴尬的是新版的都是英文,不过也不差啦,里面除了专业名词,其实过了四级的人我觉得都能看懂的呢!之后我的学习记录也将按照新版的编写,up我擦线过六级,啃完这一篇全英的,下年努把力,争取六级过500!之前的博客找个时间也翻新一下吧,就酱~
本章内容
- 密码安全性
- 用Flask-Login验证用户身份
- 需要用户登陆才能访问页面
- 在模板中显示登陆用户
- 用户注册
密码安全性
若想保证数据库中用户密码的安全,关键在于不存储密码本身,而是存储密码的散列值。计算密码散列值的函数接收密码作为输入,添加随即内容(盐值)之后,使用多种单向加密算法转换密码,最终得到一个和原始密码没有关系的字符序列,而且无法还原成原始密码,核对密码时,密码散列值可代替原始密码,因为计算散列值的函数时可复现的:只要输入(密码和盐值)一样,结果就一样
我们用Werkzeug中的security模块实现密码散列值的计算
更新一下我们的模型,添加两个方法
文件:/app/models.py
#......
from werkzeug.security import generate_password_hash, check_password_hash
class User(UserMixin, db.Model):
#......
def set_password(self, password):
self.password_hash = generate_password_hash(password)
def check_password(self, password):
return check_password_hash(self.password_hash, password)
实现一下
用Flask-Login验证用户身份
flask有一个非常好用的扩展Flask-login,这个扩展可用于管理用户的登陆状态,让应用程序“记住”用户,登陆时可以导航到不同页面,即便在关闭浏览器后,用户也能保持登陆状态
先初始化这个扩展
文件:/app/–init–.py
#......
from flask_login import LoginManager
app = Flask(__name__)
#......
login = LoginManager(app)
#......
要使用Flask-Login扩展,应用的User模型必须实现以下几个属性和方法
属性/方法 | 说明 |
---|---|
is_authenticated | 如果用户提供的登陆凭据有效,必须返回True,否则返回False |