Before anybody marks it as duplicate, I know there are tons of similar or exactly same question, but none of the solution seemed to work for me and I am clueless.
As usual I want my User model from django.contrib.auth.models to have case insensitive username. I have tried both methods described here. Unfortunately none of those worked for me. Do I also need to edit my views.py after going through one the method described in the link? what should I do to achieve case insensitiveness?
Here is my view
def login_page(request):
if(request.method == 'POST'):
name = request.POST['user']
if not User.objects.filter(username=name).exists():
return render(request, 'login.html', {'error_user': 'user does not exist'})
pwd = request.POST['pwd']
user = authenticate(username=name, password=pwd)
if user is not None:
login(request, user)
return redirect('index')
else:
return render(request, 'login.html', {'error_pwd': name})
else:
return render(request, 'login.html')
Here is part of my models.py:
class CustomUserManager(UserManager):
def get_by_natural_key(self, username):
case_insensitive_username_field =
'{}__iexact'.format(self.model.USERNAME_FIELD)
return self.get(**{case_insensitive_username_field: username})
class CustomUser(AbstractUser):
objects = CustomUserManager()
class ContentItem(models.Model):
upload_date = models.DateTimeField(auto_now=True)
title = models.CharField(max_length=100, default='no title')
description = models.CharField(max_length=400, default='no description')
image = models.ImageField(upload_to='image_board/posts/',
default='null')
uploaded_by = models.ForeignKey(User, default='0')
def __str__(self):
return self.title
def get_likes(self):
no = self.like_set.all().count()
if no is not None:
return no
else:
return 0
class Profile(models.Model):
user = models.OneToOneField(User,
related_name='profile',on_delete=models.CASCADE)
#email = models.EmailField()
#first_name = models.CharField(max_length=20, blank=True)
#last_name = models.CharField(max_length=20, blank=True)
personal_info = models.TextField(blank=True)
job_title = models.CharField(max_length=100, blank=True)
department = models.CharField(max_length=100, blank=True)
location = models.CharField(max_length=100, blank=True)
expertise = models.TextField(blank=True)
phone_regex = RegexValidator(regex=r'^\+?1?\d{5,15}$', message="Phone
number must be entered in the format: '+123456'. Between 5 and 15 digits
allowed.")
phone_number = models.CharField(validators=[phone_regex], max_length=16,
blank=True)
contact_skype = models.URLField(null=True, blank=True)
contact_facebook = models.URLField(null=True, blank=True)
contact_linkedin = models.URLField(null=True, blank=True)
user_photo = models.ImageField(upload_to='../media/img',
default='../media/img/anon.png')
def __str__(self):
return self.job_title
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
instance.profile.save()
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
EDIT: For option 1 from the link I get following error while making migration:
File "C:\Anaconda3\lib\site-packages\django-1.11-py3.4.egg\django\contrib\auth\__init__.py", line 194, in get_user_model
"AUTH_USER_MODEL refers to model '%s' that has not been installed" % settings.AUTH_USER_MODEL
django.core.exceptions.ImproperlyConfigured: AUTH_USER_MODEL refers to model
'core.CustomUser' that has not been installed
Option 2 throws no error but if i create a user with username "User" and try to login with username "user", it gives "user doesn't exist" error.
You can try something like this
def login_page(request):
if(request.method == 'POST'):
name = request.POST['user']
temp_user = User.objects.filter(username__iexact=name)
if not temp_user.exists():
return render(request, 'login.html', {'error_user': 'user does not exist'})
pwd = request.POST['pwd']
user = authenticate(username=temp_user.username, password=pwd)
if user is not None:
login(request, user)
return redirect('index')
else:
return render(request, 'login.html', {'error_pwd': name})
else:
return render(request, 'login.html')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With