3

django-registration と共に (Django 1.5 のカスタム ユーザー モデルを使用して) ユーザー名として電子メール アドレスを使用しようとしています。

django-registration のバージョン 1.0 のドキュメントには、次のように書かれています。

ベース ビュー クラスは意図的にユーザー モデルに依存しません。それらをサブクラス化し、カスタム ユーザー モデルのロジックを実装するだけです。

私は登録ビューをサブクラス化しましたが、残念ながら、RegistrationProfile はユーザー モデルにユーザー名フィールドがあることをまだ期待しているようです。私はメールを持っているだけです(姓、名なども)

これはバグですか?django-registration では、デフォルトの基本ユーザー モデルを使用する必要があるように見えます。基本モデルに追加するカスタム ユーザー モデルを使用できるだけです。

それを回避する方法はありますか?たぶん、登録プロファイルもサブクラス化できますか? どうすればいいですか?

ありがとう。

4

3 に答える 3

2

デフォルトのユーザープロファイルを使い続けると、長期的には物事が楽になると思います. メールアドレスでログインする機能を追加しようとしているだけなら、新しい認証バックエンドを作成することをお勧めします:

from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.models import User


class EmailModelBackend(ModelBackend):
    def authenticate(self, username=None, password=None):
        try:
            user = User.objects.get(email__iexact=username)
            if user.check_password(password):
                return user
        except User.DoesNotExist:
            return None

次に、settings.py へのバックエンドが必要になります。

AUTHENTICATION_BACKENDS = (
    'yourproject.yourapp.yourmodule.EmailModelBackend',
    'django.contrib.auth.backends.ModelBackend'
)
于 2013-08-25T23:19:14.637 に答える
1

そのままでは、複雑です。必要がある:

  • dr-1.0 では、models.py は User モデルに「username」フィールドがあると想定するため、このパッチを適用します。
  • registration/backends/default/views.py をコピー/貼り付け/編集して、独自の「バックエンド」を作成します
  • registration/forms.py から登録フォームをコピー/貼り付け/編集します。
  • ほとんどの場合、登録ビューを変更せずに使用できます

質問はカスタム ユーザーと Django 1.5 に関するものなので、django-registration-email は悪い答えだと思います。Thisi は Django <1.5 用で、偽のユーザー名を作成し、問題を回避します。

于 2013-10-28T20:42:02.003 に答える
0

これはあなたを助けるかもしれません:

https://pypi.python.org/pypi/django-registration-email/0.5.1

彼らはこれを django-registration に実装しました

于 2013-10-23T19:45:23.400 に答える