2012-02-28 73 views
51

Tôi đã nhập một nhóm người dùng và dữ liệu của họ vào dự án django. Tôi cần phải chỉ định một mật khẩu cho mỗi. Là một đoạn mã như vậy ra khỏi đó để tạo mật khẩu mà sẽ đối phó với băm Django và muối?Trình tạo mật khẩu Django

+0

Nó có thể đã thay đổi, nhưng bạn không phải "đối phó với hàm băm và muối Django" bởi vì bạn có thể sử dụng ['.set_pass word() 'helper function] (https://docs.djangoproject.com/en/1.10/ref/contrib/auth/#django.contrib.auth.models.User.set_password) trên một đối tượng' User' xử lý cung cấp mật khẩu với hàm dẫn xuất khóa đã chọn của bạn và đặt trường/thuộc tính '.password' với nó. –

Trả lời

137

Bạn cũng có thể sử dụng được xây dựng trong chức năng make_random_password

for user in new_users: 
    password = User.objects.make_random_password() 
    user.set_password(password) 
    # email/print password 
+11

Cũng lưu ý rằng 'make_random_password()' chấp nhận các đối số từ khóa 'length' và' allowed_chars'. – benjaoming

3
import random 
import string 
user.set_password(''.join([random.choice(string.digits + string.letters) for i in range(0, 10)])) 
user.save() 
4

Chỉ cần sử dụng API - django.contrib.auth.models.User có phương thức .set_password(). Dưới đây là một ví dụ (mà tôi đã không kiểm tra, nhưng bạn sẽ nhận được các ý tưởng):

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() 
4

Ngoài ra bạn có thể sử dụng from django.utils.crypto import get_random_string ra khỏi auth mô-đun, nó cũng chấp nhận đối số từ khóa lengthallowed_chars.

+1

+1. Ưu tiên hơn User.objects.make_random_password() vì nó có thể được chạy từ các script độc lập mà không cần phải cấu hình các thiết lập Django. Tôi sử dụng điều này cho thế hệ vật cố ngẫu nhiên. – m000

3

Nếu bạn chỉ cần giải pháp của Django, hãy thử tiếp theo:

Để tạo mật khẩu bình thường, hãy thử sử dụng 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' 

Nếu bạn cần mạnh mẽ và sức mạnh mật khẩu, sau đó cố gắng xây dựng trong "hashers" trong 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=" 

Ghi chú:

  1. sử dụng Django 1.10 và Python 3.4
Các vấn đề liên quan