将自定义字段添加到Django Admin身份验证表单

时间:2020-09-01 10:05:45

标签: django django-forms django-views django-admin

我正在构建一个应用程序,其中的身份验证过程具有三个字段。

  1. 子域
  2. 用户名
  3. 密码

每个子域定义一个隔离的空间,用户名仅在其子域内是唯一的

例如:

  • 子域foo.bar.com的用户jhon_doe的密码为secret。它可能存在另一个jhon_doe,但在其他子域中。

所以...我创建了一个自定义的后端身份验证,它运行良好。问题是默认情况下,登录Django Admin表单具有usernamepassword字段。

我想使用subdomain usernamepassword字段来实现自定义Django Admin登录表单。

1 个答案:

答案 0 :(得分:1)

我有一个类似的要求,我用以下方式做到了。看看它是否可以帮助您。

首先,我扩展了现有的用户模型,并在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>

而我的登录表单的结果是

enter image description here

我想在这里澄清一下,如果您想更改现有的登录屏幕(这是Django的默认设置),则必须进行搜索,但在我的建议下,您应该使用自己的自定义方式。

谢谢您,祝您编程愉快...