django 默认身份验证表单显示用户名而不是电子邮件
django default Authenticaiton form shows username rather than email
我用 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>
标记中调用 {{form.as_p}}
以显示表单输入详细信息。
但是,默认情况下,这会显示用户名和密码表单。如何用电子邮件替换用户名?
在 rest-auth 中,可浏览 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
您应该在 CustomUser
模型上设置 USERNAME_FIELD='email'
。
How to use email as username 上有一篇不错的博文。
我用 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>
标记中调用 {{form.as_p}}
以显示表单输入详细信息。
但是,默认情况下,这会显示用户名和密码表单。如何用电子邮件替换用户名?
在 rest-auth 中,可浏览 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
您应该在 CustomUser
模型上设置 USERNAME_FIELD='email'
。
How to use email as username 上有一篇不错的博文。