2016-06-15 1 views
1

파일에서 일부 데이터를 빠르게 읽고 많은 테스트 계정을 만들고 싶습니다. 일반적으로 모델에 많은 레코드를 추가하는 것이 훨씬 빠르기 때문에 bulk_create 메서드를 사용하는 것을 선호합니다. 그러나 Django의 사용자 모델에서 bulk_create 메소드를 사용할 때 비밀번호가 올바르게 해시되지 않아 사용자로 로그인 및 로그 아웃 할 수 없습니다.Django 1.9 일괄 적으로 비밀번호를 해시하지 않는 새로운 사용자 생성

User.objects.bulk_create([ 
     User(
      username=name, 
      email='[email protected]', 
      password='Sample&Password!', 
      is_active=True, 
     ) for name in f.read().splitlines() 
    ]) 

장고 관리자는 각 사용자의 암호 필드에 다음과 같은 오류

잘못된 암호 형식이나 알 수없는 해싱 알고리즘을 보여줍니다.

그러나 두 번째 방법은 계속 작동합니다 (훨씬 느리지 만). 내 질문은

for name in f.read().splitlines(): 
     User.objects.create_user(
      name, 
      '[email protected]', 
      password="Sample&Password!" 
     ).save() 

, 제대로 장고 한 번에 사용자를 생성 벌크하는 방법이있다. Django는 이유 때문에 이처럼 동작합니까? 아니면 버그입니까?

답변

3

make_password을 사용하십시오. 이렇게하면 해시 된 암호가 데이터베이스에 저장됩니다. make_password는 암호가 데이터베이스에 암호화 및 원본을 저장하고 있기 때문이다 see this

from django.contrib.auth.hashers import make_password 

User.objects.bulk_create([ 
    User(
     username=name, 
     email='[email protected]', 
     password=make_password('Sample&Password!'), 
     is_active=True, 
    ) for name in f.read().splitlines() 
]) 
+0

, 감사합니다 –

0

너무 느린 경우. 암호화하려면 make_password을 사용하기 만하면됩니다.

시도하십시오 : 빠른 응답

이 내 문제를 해결
from django.contrib.auth.hashers import make_password 

User.objects.bulk_create([ 
    User(
     username=name, 
     email='[email protected]', 
     password=make_password('Sample&Password!'), 
     is_active=True, 
    ) for name in f.read().splitlines() 
]) 
관련 문제