Django的默认Authenticaiton形式显示用户名,而不是电子邮件(django defa

2019-10-29 03:32发布

我实现了我自己的用户登录表单中包含的Django

from django.contrib.auth.forms import AuthenticationForm

class CustomUserLoginForm(AuthenticationForm):
    class Meta:
        model = CustomUser
        fields = ('email', 'password')

那么作为一个观点,这是我有:

from rest_auth.views import LoginView
from users.forms import CustomUserLoginForm

class CustomLoginView(LoginView): 
    def get(self, request):
        form = CustomUserLoginForm()
        return render(request, "api/test_template.html", context={"form": form})

然后在我的模板,我打电话{{form.as_p}}<form>标签来显示表单输入的详细说明。

然而,默认情况下,这显示了用户名和密码的形式。 我怎么能替换为电子邮件的用户名?

在休息-AUTH,browserable API,无论是用户名和电子邮件都存在,所以我知道我可以,因为我使用的是做到这一点rest-auth LoginView作为后端。

我可以手动解压{{form}}因为后来我还是想风格这种形式。 我怎样才能做到这一点?

更新

我打开的形式`API / test_template.html自己现在看起来像下面:

{% block content %}

    <div class="container">
        <form method="POST">
        {% csrf_token %}
            <div>
                <label for="{{ form.email.id_for_label }}">Email: </label>
                <input{{ form.email }}>
            </div>

            <div>
                <label for="{{ form.password.id_for_label }}">password: </label>
                <input type="password" {{ form.password }}>
            </div>

            <button style="background-color:#F4EB16; color:blue" class="btn btn-outline-info" type="submit">Login</button>
        </form>
        Don't have an account? <a href="/register" target="blank"><strong>register here</strong></a>!
    </div>
{% endblock %}

此作品,但是, rest-auth框架仍然需要用户名不能为空。 我怎样才能改变这种状况,忽略了用户名?

我的用户模型

from django.contrib.auth.models import AbstractUser
from django.db import models


class CustomUser(AbstractUser):

    def __str__(self):
        return self.email

Answer 1:

你应该设置USERNAME_FIELD='email'CustomUser模型。

有好一点的博客帖子如何使用电子邮件作为用户名 。



文章来源: django default Authenticaiton form shows username rather than email