Django 4.2已弃用make_random_password,合适的替代方案是什么?
Django 4.2+ 替代 make_random_password 的方案
官方推荐方案:使用Python标准库 secrets 模块
Django官方在弃用make_random_password后,推荐用Python内置的secrets模块生成安全随机密码,该模块专为安全场景设计,生成的随机数比random模块更可靠。
示例代码(可自定义密码长度和复杂度):
import secrets import string def generate_secure_password(length=12): # 定义密码允许的字符集,可按需调整 allowed_chars = string.ascii_letters + string.digits + string.punctuation # 确保密码满足复杂度要求(可选,根据业务规则调整) while True: password = ''.join(secrets.choice(allowed_chars) for _ in range(length)) if (any(c.islower() for c in password) and any(c.isupper() for c in password) and any(c.isdigit() for c in password) and any(c in string.punctuation for c in password)): break return password
Django原生工具备选:django.utils.crypto.get_random_string
如果倾向于使用Django自带工具,可使用get_random_string生成随机字符串,需自行补充复杂度校验逻辑:
from django.utils.crypto import get_random_string # 生成包含字母、数字、特殊字符的随机字符串 password = get_random_string( length=12, allowed_chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()' ) # 如需复杂度校验,逻辑同secrets示例中的循环判断
关于hashlib的使用说明
hashlib是用于哈希加密的模块,并非生成明文密码的工具。如果用它生成"密码",得到的是不可逆的哈希字符串,通常不符合用户可使用的明文密码要求(格式单一、可读性差)。hashlib的正确用途是存储密码的哈希值,而非生成明文密码,因此不适合替代make_random_password。
内容的提问来源于stack exchange,提问作者Rafael Dias
相关产品推荐
相关产品推荐

