4

django ユーザー モジュールをカスタマイズして、いくつかのフィールドを追加しています。

私のモデルは次のようになっています

class Drinker(models.Model):
    user = models.OneToOneField(User)
    birthday = models.DateField()
    name     = models.CharField(max_length = 100)

    def __unicode__(self):
        return self.name

そして、これが私の登録ビューです

def DrinkerRegistration(request):
    if request.user.is_authenticated():
        return HttpResponseRedirect('/profile/')
    if request.method == "POST":
        form = RegistrationForm(request.POST)
        if form.is_valid():
            user = User.objects.create(username = form.cleaned_data['username'],email = form.cleaned_data['email'],password = form.cleaned_data['password'])
            user.save()
            drinker = Drinker(name = form.cleaned_data['name'],birthday = form.cleaned_data['birthday'],user=user)
            drinker.save()
            return HttpResponseRedirect('/profile/')
    else:
        form = RegistrationForm()
        context = {'form':form}
        return render_to_response('register.html',context,context_instance = RequestContext(request))

今私の質問は、ユーザーが私のauth_userテーブルに登録しているとき、パスワードが計画テキストに保存されている、つまり原因です

Unknown password hashing algorithm '123'. Did you specify it in the PASSWORD_HASHERS setting?

ログイン時のエラー

ただし、スーパーユーザーのパスワードは auth_user テーブルの SHA1 形式 (よくわかりません) であり、ログインできます

ここでパスワードフィールドをハッシュする方法を教えてください。

4

3 に答える 3

4

使用しないでください。使用してください。正しいアルゴリズムを使用して、提供されたパスワードをハッシュしますUser.objects.create()User.objects.create_user()

于 2012-08-23T07:28:26.217 に答える
0

User.set_password にパスワードをハッシュさせて適切な形式で保存するか、他の回答で述べたように適切なマネージャー関数を使用する必要があります。

基本的に、Django にパスワードをハッシュするように依頼することはなく、プレーン テキストをデータベースに入れようとしました。そうすることで、Django が期待する形式 (ハッシュソルト hashed_pa​​ss) が満たされなかったため、エラーが発生しました。

さらに良いことに、アプリのこれらの部分は、Django Registration などの再利用可能なアプリを使用して行うのが最適です。

ユーザーが登録 (作成) された後、シグナルを使用して Drinker プロファイルを作成できます。

于 2012-08-23T07:29:17.160 に答える
0

create_user()パスワードを正しく設定するヘルパー関数を使用する必要があります。

于 2012-08-23T07:29:23.557 に答える