required_fields - Generador de contraseñas Django
make_random_password django (5)
He importado un montón de usuarios y sus datos a un proyecto django. Necesito asignar una contraseña a cada uno. ¿Hay un fragmento de este tipo para la generación de contraseñas que haga frente al hash y la sal de Django?
Si solo necesitas las soluciones de Django, prueba a continuación:
Para generar una contraseña normal intente utilizar BaseUserManager.
In [341]: from django.contrib.auth.base_user import BaseUserManager
# simple password, it length is 10, and it contains ascii letters and digits
In [344]: BaseUserManager().make_random_password()
Out[344]: ''aYMX5Wk7Cu''
In [345]: BaseUserManager().make_random_password()
Out[345]: ''rM7759hw96''
In [346]: BaseUserManager().make_random_password()
Out[346]: ''EkbZxEXyAm''
# passed length of a password
In [347]: BaseUserManager().make_random_password(45)
Out[347]: ''dtM9vhSBL9WSFeEdPqj8jVPMH9ytsjPXrkaHUNUQu4zVH''
In [348]: BaseUserManager().make_random_password(45)
Out[348]: ''jypVaXuw9Uw8mD4CXtEhtj2E4DVYx23YTMwy8jGTKsreR''
# passed length of a password and symbols for choice
In [349]: BaseUserManager().make_random_password(45, ''abcdf'')
Out[349]: ''daacbfabfccfdbdddbbcddcfcfbfcdabbaccbfcadbccd''
In [351]: import string
# password contains only digits
In [352]: BaseUserManager().make_random_password(50, string.digits)
Out[352]: ''00526693878168774026398080457185060971935025500935''
# password contains only ascii symbols in lowercase
In [353]: BaseUserManager().make_random_password(50, string.ascii_lowercase)
Out[353]: ''nvftisuezofnashdhlalfmscnmqtvigwjpfwsyycsefekytmar''
# password contains only ascii symbols in uppercase
In [354]: BaseUserManager().make_random_password(50, string.ascii_uppercase)
Out[354]: ''APKSUHHHTAAJCFEUONIXWWAKJGXIBHTQDZBTSYFTPDFOSRYEQR''
Si necesita una contraseña segura y potente, intente con "hashers" incorporados en Django
In [355]: from django.contrib.auth.hashers import make_password
In [357]: make_password('''')
Out[357]: ''pbkdf2_sha256$30000$JuKXdW3shCjL$PsPJX7Zale5JUBkWpIJI/+QlsuVWhz9Q+GQWVtTpQ/Y=''
In [358]: make_password(''text'')
Out[358]: ''pbkdf2_sha256$30000$lSv8kQ39BHE7$KQC5hRhuphYBXmBrXZBJGC+nxygfNWTDf8zQf/NNgY8=''
In [360]: make_password(''text'', salt=[''simething''])
Out[360]: "pbkdf2_sha256$30000$[''simething'']$D+1vJQx9W2/c9sIz/J+7iEz4d4KFPg/R+0S87n/RKR4="
In [361]: make_password(''text'', salt=[''something''])
Out[361]: "pbkdf2_sha256$30000$[''something'']$NIcmOkEyg6mnH5Ljt+KvI2LVgZWg6sXS6Rh865rbhSc="
Notas:
- Usado Django 1.10 y Python 3.4
Simplemente use la API - django.contrib.auth.models.User
tiene un método .set_password()
. Aquí hay un ejemplo (que no he probado, pero debes tener la idea):
from random import choice
from string import digits, letters
from django.contrib.auth.models import User
def _pw(length=6):
s = ''''
for i in range(length):
s += random.choice(digits + letters)
return s
for user in User.objects.all(): # or .filter(...)
user.set_password(_pw())
user.save()
También puede usar from django.utils.crypto import get_random_string
fuera del módulo auth
, también acepta los argumentos de palabra clave length
y allowed_chars
.
También puede usar la función make_random_password
for user in new_users:
password = User.objects.make_random_password()
user.set_password(password)
# email/print password
import random
import string
user.set_password(''''.join([random.choice(string.digits + string.letters) for i in range(0, 10)]))
user.save()