You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 05:07:59