1

何かが足りない。

Django プロジェクトにカスタム ユーザー モデルがあります。ユーザー名フィールドとして電子メールを使用します。

myproject/users/models.py:

class CustomUser(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(
        verbose_name='E-mail address',
        max_length=255,
        unique=True,
        db_index=True,
    )
    is_active = models.BooleanField(default=True)

    USERNAME_FIELD = 'email'


    objects = CustomUserManager()

    ...

settings.py:

AUTH_USER_MODEL = 'users.CustomUser'

HTML ログイン フォームから POST リクエストを受け取り、株式認証ログイン ビューを呼び出してその応答を取得するビューを作成しました。

myproject/users/views.py:

from django.contrib.auth.views import login

...

def log_in(request, template_name):
    response = login(request, template_name=template_name)

    return response

(それ以上のことを行いますが、私が見ている望ましくない動作の原因としてそれを排除するために、他のコードをコメントアウトしました。)

ブラウザでログインしようとすると (最初の .xml ファイルを作成したときに作成したスーパーユーザーの電子メール アドレスとパスワードを使用してsyncdb)、フォーム エラーが発生します。

username: This field is required.

どうして?ストック認証ログインビューは組み込みの auth を使用すると考えました。AuthenticationFormこれは明らかにAbstractBaseUser.

4

1 に答える 1

0

わかりました。

(Django のフォーム テンプレート タグを使用してレンダリングするのではなく) ログイン フォームの HTML を自分で作成したところ、電子メール フィールドは次のようになりました。

<input id="loginForm_email" name="email" type="email" placeholder="Your e-mail adddress">

ストック認証ログインビューでは、次のusernameように、ユーザー名に相当するフィールドを実際に呼び出す必要があると思います。

<input id="loginForm_email" name="username" type="email" placeholder="Your e-mail adddress">

その変更を行うと、うまくいきました。

于 2013-06-12T15:25:55.057 に答える