Ich habe einen Haufen Benutzer und deren Daten in ein Django-Projekt importiert. Ich muss jedem ein Passwort zuweisen. Ist das ein solcher Ausschnitt für die Passwortgenerierung, der mit dem Django-Hash und -Salz fertig wird?
Es hat sich möglicherweise geändert, aber Sie müssen nicht "mit dem Django-Hash und -Salz fertig werden", da Sie die .set_password()Hilfsfunktion für ein UserObjekt verwenden können, das das angegebene Kennwort mit der von Ihnen gewählten Schlüsselableitungsfunktion verarbeitet und das .passwordFeld / Attribut damit festlegt .
Beachten Sie auch, dass make_random_password()Schlüsselwortargumente lengthund akzeptiert werden allowed_chars.
benjaoming
3
user.save()Änderungen zu übernehmen fehlt
giopromolla
12
Sie können auch from django.utils.crypto import get_random_stringaußerhalb des authModuls verwenden, es akzeptiert Schlüsselwortargumente lengthund allowed_charsauch.
+1. Bevorzugt gegenüber User.objects.make_random_password (), da es von eigenständigen Skripten ausgeführt werden kann, ohne dass Django-Einstellungen konfiguriert werden müssen. Ich benutze dies für die Erzeugung zufälliger Geräte.
M000
1
Ich bevorzuge dies, weil ich dafür nicht mit Objekten interagieren muss. Es macht so etwas wie einen Zufallskennwortgenerator für einen Benutzer viel einfacher. Zum Beispiel def get_password_view (Anfrage): Rückgabe von JsonResponse ({"Passwort": get_random_string ()})
John Smith
Bevorzugen Sie dieses, da User.objects.make_random_password()es Fehler gibt, wenn es geerbt wurde.
AB Abhi
8
Wenn Sie nur die Lösungen eines Django benötigen, versuchen Sie es als Nächstes:
Verwenden Sie BaseUserManager, um ein normales Kennwort zu generieren.
In [341]: from django.contrib.auth.base_user import BaseUserManager
# simple password, it length is10, 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'
Wenn Sie ein sicheres und leistungsfähiges Passwort benötigen, versuchen Sie es mit integrierten "Hashern" im 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="
Verwenden Sie einfach die API - django.contrib.auth.models.Userhat eine .set_password()Methode. Hier ist ein Beispiel (das ich nicht getestet habe, aber Sie sollten auf die Idee kommen):
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()
.set_password()
Hilfsfunktion für einUser
Objekt verwenden können, das das angegebene Kennwort mit der von Ihnen gewählten Schlüsselableitungsfunktion verarbeitet und das.password
Feld / Attribut damit festlegt .Antworten:
Sie können auch die integrierte Funktion make_random_password verwenden
for user in new_users: password = User.objects.make_random_password() user.set_password(password) # email/print password
quelle
make_random_password()
Schlüsselwortargumentelength
und akzeptiert werdenallowed_chars
.user.save()
Änderungen zu übernehmen fehltSie können auch
from django.utils.crypto import get_random_string
außerhalb desauth
Moduls verwenden, es akzeptiert Schlüsselwortargumentelength
undallowed_chars
auch.quelle
User.objects.make_random_password()
es Fehler gibt, wenn es geerbt wurde.Wenn Sie nur die Lösungen eines Django benötigen, versuchen Sie es als Nächstes:
Verwenden Sie BaseUserManager, um ein normales Kennwort zu generieren.
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'
Wenn Sie ein sicheres und leistungsfähiges Passwort benötigen, versuchen Sie es mit integrierten "Hashern" im 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="
Anmerkungen:
quelle
Verwenden Sie einfach die API -
django.contrib.auth.models.User
hat eine.set_password()
Methode. Hier ist ein Beispiel (das ich nicht getestet habe, aber Sie sollten auf die Idee kommen):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()
quelle
import random import string user.set_password(''.join([random.choice(string.digits + string.letters) for i in range(0, 10)])) user.save()
quelle