Я нашел следующие способы получить криптографически безопасную случайную строку в python, используя секреты.
Используя token_urlsafe
import secrets
secrets.token_urlsafe(50)
# Note 50 is bytes. base64 uses 6bits for a character so (50 x 8)/6 = 67
's9HXAIOVizuJS8tdF6r3KA35XEcEcATIzTKeyvat8oIZf6WeR_e-nbvPv4W0fg-nLgI'
Используя Выбор
#django: Method used by get_random_secret_key()
allowed_chars='abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)'
length=50
''.join(secrets.choice(allowed_chars) for i in range(length))
'z%+9t$d-nu)&%v@f)by@$$lk*h=%hma3r(lx0nud7^7@)*6ls2'
Также, почему django предпочитает использовать secretts.choice