尝试将Bootstrap CSS类添加到AuthenticationForm,但是将authentication_form添加到urls.py时,没有任何变化?它会找到模板,并且可以使用自定义用户模型登录。
urls.py
from django.urls import path
from user.forms import AuthForm
from django.contrib.auth import views as auth_views
urlpatterns = [
path('auth/', auth_views.LoginView.as_view(
authentication_form=AuthForm,
template_name='user/login.html',), name='login'),
]
forms.py
from django import forms
from django.contrib.auth.forms import AuthenticationForm
from django.forms.widgets import PasswordInput, EmailInput
class AuthForm(AuthenticationForm):
class Meta:
widgets = {
'username':forms.EmailInput(attrs={'class':'form-control form-control-sm'}),
'password':forms.PasswordInput(attrs={'class':'form-control form-control-sm'}),
}
# I have also tried
username = forms.CharField(widget=forms.EmailInput(attrs={'class':'form-control form-control-sm'}))
password = forms.CharField(widget=forms.PasswordInput(attrs={'class':'form-control form-control-sm'}))
我看不出有什么问题吗?没有错误消息或任何东西,我可以登录,只是LoginView根本不使用AuthForm。这是Django 2.1.7。
感谢您的时间和帮助。
答案 0 :(得分:0)
我建议您阅读有关customizing authentication的django官方文档。
首先,您可以为用户模型创建自定义模型。
$ python manage.py startapp customuser
在customuser / models.py文件中,创建一个名为 User
的新模型。from django.db import models
from django.contrib.auth.models import (
BaseUserManager, AbstractBaseUser, PermissionsMixin
)
class UserManager(BaseUserManager):
def create_user(self, email, full_name, password=None):
if not email:
raise ValueError('Users must have an email address')
user = self.model(
email=self.normalize_email(email),
full_name=full_name
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, full_name, password):
user = self.create_user(
email,
full_name=full_name,
password=password,
)
user.is_superuser = True
user.is_admin = True
user.save(using=self._db)
return user
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(
verbose_name='email address',
max_length=255,
unique=True,
)
full_name = models.CharField(
verbose_name='full name',
max_length=128
)
profile_image = models.ImageField(
null=True,
blank=True,
upload_to='profile_images/')
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
objects = UserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['full_name']
def __str__(self):
return self.email
@property
def is_staff(self):
return self.is_admin
在settings.py文件中更新INSTALLED_APPS并更改AUTH_USER_MODEL变量
INSTALLED_APPS = [
...,
customuser,
]
...
AUTH_USER_MODEL = 'customuser.User'
之后,您已经可以使用电子邮件登录
答案 1 :(得分:0)
这是我的模板login.html的内容,我已经在您的测试应用程序中实现了您的代码,并且效果很好。
在您的应用中,添加 templates 文件夹,在其内部创建login.html文件并添加此代码。
{% extends 'base.html' %}
{% block content %}
<form class="" action="{% url 'login' %}" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" name="" value="Send">
</form>
{% endblock %}