2

我用 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>标签来显示表单输入详细信息。

但是,默认情况下,这会显示用户名和密码表单。如何用电子邮件替换用户名?

在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
4

1 回答 1

1

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

有一篇关于如何使用电子邮件作为用户名的不错的博文。

于 2019-09-15T09:50:14.253 回答