2016-06-15 4 views
1

ファイルからいくつかのデータを読み込み、多くのテストアカウントをすばやく作成したい。私はbulk_createメソッドを使用したいと思います。これは、通常、モデルに多くのレコードを追加する方がはるかに高速です。しかし、DjangoのUserモデルで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() 
    ]) 

Djangoの管理者は、各ユーザーのパスワードフィールドに、次のエラー

無効なパスワード形式または未知のハッシュアルゴリズムを示しています。

しかし、2番目の方法は(ただし、はるかに遅いですが)動作し続けます。

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

私の質問は、適切に一括してDjangoでユーザーを作成する方法ですか? 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() 
]) 
関連する問題