我无法登录管理员,自定义用户后登录在 Django 项目中不起作用
I'm unable to login in admin and login is not working in Django project after Custom User
Tysm提前,帮助
已经创建了超级用户,但管理员登录或登录视图无法正常工作,验证 时出现一些问题 returns none if correct密码和邮箱已通过
自定义用户模型
class UserManager(BaseUserManager):
def create_user(self, email, username, password=None):
if not email:
raise ValueError("Email Requierd!")
if not username:
raise ValueError("Username required!")
user = self.model(
email=self.normalize_email(email),
username=username,
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, username, password):
user = self.create_user(
email=self.normalize_email(email),
password=password,
username=username,
)
user.is_admin = True
user.is_staff = True
user.is_superuser = True
user.save(using=self._db)
return user
class User(AbstractBaseUser):
userid = models.UUIDField(
default=uuid.uuid4, editable=False, primary_key=True)
username = models.CharField(max_length=255, unique=True)
email = models.EmailField(max_length=255, unique=True)
date_joined = models.DateTimeField(auto_now_add=True)
last_login = models.DateTimeField(auto_now_add=True)
is_admin = models.BooleanField(default=False)
is_active = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
#
USERNAME_FIELD = 'email'
#
REQUIRED_FIELDS = ['username']
objects = UserManager()
def __str__(self):
return self.username
def has_perm(self, perm, obj=None):
return self.is_admin
def has_module_perm(self, app_label):
return True
已经创建了超级用户,但管理员登录或登录视图无法正常工作,验证 时出现一些问题,如果密码和邮箱都通过了!
psql view
登录查看
def login_view(request):
user = request.user
if user.is_authenticated:
return redirect('home')
if request.POST:
form = LoginForm(request.POST)
if form.is_valid():
email = request.POST['email']
password = request.POST['password']
user = authenticate(request, email=email, password=password)
if user is not None:
login(request, user)
return redirect('home')
else:
form = LoginForm()
return render(request, 'login.html', {'form': form})
forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import get_user_model, authenticate
User = get_user_model()
class UserCreateForm(UserCreationForm):
email = forms.EmailField()
#is_seller = forms.BooleanField
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
class LoginForm(forms.Form):
email = forms.EmailField(required=True)
password = forms.CharField(label='Password', widget=forms.PasswordInput)
class Meta:
model = User
fields = ['email', 'password']
def clean(self):
email = self.cleaned_data['email']
password = self.cleaned_data['password']
if not authenticate(request, email=email, password=password):
raise forms.ValidationError("Invlaid Login")
登录后,没有报错,也没有跳转到首页!
After login, it doesn't give me any errors and neither redirects to homepage!
Tysm提前,帮助
尝试将 is_active 字段设置为 default=True
Tysm提前,帮助
已经创建了超级用户,但管理员登录或登录视图无法正常工作,验证 时出现一些问题 returns none if correct密码和邮箱已通过
自定义用户模型
class UserManager(BaseUserManager):
def create_user(self, email, username, password=None):
if not email:
raise ValueError("Email Requierd!")
if not username:
raise ValueError("Username required!")
user = self.model(
email=self.normalize_email(email),
username=username,
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, username, password):
user = self.create_user(
email=self.normalize_email(email),
password=password,
username=username,
)
user.is_admin = True
user.is_staff = True
user.is_superuser = True
user.save(using=self._db)
return user
class User(AbstractBaseUser):
userid = models.UUIDField(
default=uuid.uuid4, editable=False, primary_key=True)
username = models.CharField(max_length=255, unique=True)
email = models.EmailField(max_length=255, unique=True)
date_joined = models.DateTimeField(auto_now_add=True)
last_login = models.DateTimeField(auto_now_add=True)
is_admin = models.BooleanField(default=False)
is_active = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
#
USERNAME_FIELD = 'email'
#
REQUIRED_FIELDS = ['username']
objects = UserManager()
def __str__(self):
return self.username
def has_perm(self, perm, obj=None):
return self.is_admin
def has_module_perm(self, app_label):
return True
已经创建了超级用户,但管理员登录或登录视图无法正常工作,验证 时出现一些问题,如果密码和邮箱都通过了! psql view 登录查看
def login_view(request):
user = request.user
if user.is_authenticated:
return redirect('home')
if request.POST:
form = LoginForm(request.POST)
if form.is_valid():
email = request.POST['email']
password = request.POST['password']
user = authenticate(request, email=email, password=password)
if user is not None:
login(request, user)
return redirect('home')
else:
form = LoginForm()
return render(request, 'login.html', {'form': form})
forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import get_user_model, authenticate
User = get_user_model()
class UserCreateForm(UserCreationForm):
email = forms.EmailField()
#is_seller = forms.BooleanField
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
class LoginForm(forms.Form):
email = forms.EmailField(required=True)
password = forms.CharField(label='Password', widget=forms.PasswordInput)
class Meta:
model = User
fields = ['email', 'password']
def clean(self):
email = self.cleaned_data['email']
password = self.cleaned_data['password']
if not authenticate(request, email=email, password=password):
raise forms.ValidationError("Invlaid Login")
登录后,没有报错,也没有跳转到首页!
After login, it doesn't give me any errors and neither redirects to homepage!
Tysm提前,帮助
尝试将 is_active 字段设置为 default=True