我为我的网站制作了一个自定义用户模型。我使用 AbstractBaseUser 制作模型并在设置中进行设置。用户和超级用户的创建工作正常,没有任何问题,超级用户也可以从管理页面登录。但是,当我试图让普通用户登录网站时,返回用户无。但是普通用户存在于数据库中。由于我使用了 AbstractBaseUser,因此我正在使用身份验证进行用户登录。我无法理解为什么会说用户不存在。如果我写了一些错误的代码,请纠正我。
models.py (自定义用户模型),这里 is_active 是 false 但我在 regd 之后手动激活它所以问题不是因为这个
class CustomUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField( unique= True)
full_name = models.CharField(max_length=255)
phone_no = models.CharField(max_length=10, blank= True)
address = models.CharField(max_length=500, blank= True)
plan = models.CharField(max_length=255, blank= True)
age = models.CharField(max_length=2, blank= True)
date_joined = models.DateTimeField(default=timezone.now)
is_staff = models.BooleanField( default=False)
is_active = models.BooleanField( default=False)
objects = CustomUserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['full_name']
def __str__(self):
return self.email
manager.py(自定义用户模型管理器)
class CustomUserManager(BaseUserManager):
# CUSTOM USER MODEL FOR USER WHERE EMAIL IS THE USERNAME FOR AUTHENTICATION RATHER THEN USERNAME
def create_superuser(self, email, full_name, password, **other_fields):
# CREATE AND SAVE SUPERUSER WITH THE GIVEN EMAIL AND PASSWORD
other_fields.setdefault('is_staff', True)
other_fields.setdefault('is_superuser', True)
other_fields.setdefault('is_active', True)
if other_fields.get('is_staff') is not True:
raise ValueError(_('is staff must be set to true'))
if other_fields.get('is_superuser') is not True:
raise ValueError(_('is superuser must be set to true'))
return self.create_user(email, full_name, password, **other_fields)
def create_user(self, email,full_name, password, **other_fields):
# CREATE AND SAVE USER WITH THE GIVEN EMAIL AND PASSWORD
if not email:
raise ValueError(_('The Email must be set'))
email = self.normalize_email(email)
user = self.model(email=email, full_name=full_name,**other_fields)
user.set_password(password)
user.save()
return user
设置.py
AUTH_USER_MODEL = 'account.CustomUser'
views.py(处理登录和用户创建的函数)
def registerpage(request):
if request.method == 'POST':
full_name = request.POST['full_name']
age = request.POST['age']
phone_no = request.POST['phone']
address = request.POST['address']
plan = request.POST['plan']
email = request.POST['email']
password1= request.POST['password']
password2= request.POST['con_password']
if password1==password2:
user=CustomUser.objects.create_user(full_name=full_name,age=age, phone_no=phone_no, address=address, plan=plan, email=email, password=password1)
user.save()
print('user created')
return redirect('login')
else:
return render(request, 'register.html')
def loginpage(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('paswword')
# user = CustomUser.objects.get(email=username, password=password)
user = authenticate(request, email=username, password=password)
if user is not None:
login(request, user)
return redirect(user_page) # this is in home views
else:
return HttpResponse(' User doesnt exist') #FOR ERROR PURPOSE
else:
return render(request, 'login.html')
def t_and_c(request):
return render(request, 'terms_and_condition.html')
这是我第一次使用自定义模型,所以我不知道我是否使用正确的方式登录用户。如果我错了,请纠正我。