首页 文章

当我使用自定义用户模型时,为什么stock autight登录视图需要用户名字段值?

提问于
浏览
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请求的视图,并调用stock auth登录视图来获取它的响应:

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

(它会做更多的事情,但我已经注释掉了其他代码,以消除它作为我所看到的不必要行为的原因 . )

当我尝试在浏览器中登录时(使用我执行初始 syncdb 时创建的超级用户的电子邮件地址和密码),我收到表单错误:

username: This field is required.

怎么会?我认为stock auth登录视图将使用内置的auth AuthenticationForm ,其中apparently works with any subclass of AbstractBaseUser .

1 回答

  • 0

    对,得到了 .

    我自己编写了我的登录表单HTML(而不是使用Django的表单模板标记来渲染它),我的电子邮件字段如下所示:

    <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">
    

    一旦我做出改变,它就可以了 .

相关问题