众所周知,数据库用户密码不能是明文,所以要加密,django会自带加密,解密功能。
from django.contrib.auth.hashers import make_password, check_password
可以查看其源码:
def make_password(password, salt=None, hasher='default'):
"""
Turn a plain-text password into a hash for database storage
Same as encode() but generates a new random salt. If
password is None or blank then UNUSABLE_PASSWORD will be
returned which disallows logins.
"""
if not password:
return UNUSABLE_PASSWORD
hasher = get_hasher(hasher)
password = smart_str(password)
if not salt:
salt = hasher.salt()
salt = smart_str(salt)
passwd = make_password(text, None, 'pbkdf2_sha256') #text:获取的密码明文
注意:这个passwd是随时再变化的,可以用check_password来进行检测
check_password(text, passwd) #返回true / false
加密类型有以下几种:
pbkdf2_sha256
pbkdf2_sha1
bcrypt_sha256
bcrypt
sha1
unsalted_md5
crypt
在 Django 1.5 之前,Django 对于用户密码的加密方式一直是 SHA1,但在 Django 1.5 之后,密码的加密方式默认改为了 PBKDF2 算法与 SHA256 哈希值。bcrypt,crypt需要另安装库。