我有类似的要求,我通过以下方式做到了。看看能不能帮到你。
首先我扩展了我现有的用户模型,并在 models.py 中添加了电子邮件和电话。
from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
email = models.EmailField(verbose_name='email',
max_length=255, unique=True)
phone = models.CharField(null=True, max_length=255)
REQUIRED_FIELDS = ['username', 'first_name', 'last_name']
USERNAME_FIELD = 'email'
def get_username(self):
return self.email
我创建了一个authapp,并在我在 authapp 文件夹中创建的form.py 中添加了以下几行。
from django.views.generic import CreateView
from django.forms import CharField, ModelForm
from django.utils.translation import gettext_lazy as _
from authapp.models import User
class LoginForm(ModelForm):
class Meta:
model = User
fields = ('email', 'phone', 'password')
最后我在模板中的 .html 文件中添加了这段代码。请求负载中的表单名称为 login_form。
<form method="POST" action="/login/">
<div class="modal-body">{% csrf_token %} {{ login_form|crispy}}</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">
Close
</button>
<button type="submit" class="btn btn-primary">Login</button>
</div>
</form>
我的登录表单的结果是
我想在这里澄清一下,如果你想更改现有的登录屏幕,这是 Django 的默认设置,所以你必须搜索 arround,但在我的建议中,你应该实现你自己的自定义方式。
谢谢你,编码愉快...