У меня есть веб-сайт, на котором пользователи могут регистрироваться и дружить друг с другом. Однако я заметил, что пользователи с заглавными буквами в именах вызывают ошибки, когда пользователи пытаются подружиться с ними. Просто появляется страница 404, и я понял, почему это так, а не как ее исправить.
models.py
class UserProfileInfo(models.Model):
MALE = 'Male'
FEMALE = 'Female'
GENDER = [
(MALE, 'Male'),
(FEMALE, 'Female'),
]
user = models.OneToOneField(User, on_delete=models.CASCADE,max_length=30)
description = models.TextField(max_length=150)
slug = models.SlugField(unique=True,allow_unicode=True)
def __str__(self):
return f'{self.user.username}'
def get_absolute_url(self):
kwargs = {
'username':self.user.username,
}
return reverse('mainapp:view_profile_with_pk',kwargs=kwargs)
# return reverse('mainapp:post_list')
def save(self, *args, **kwargs):
# slugl = self.slug.lower()
self.slug = slugify(self.user.username)
super().save(*args, **kwargs)
И мои взгляды на добавление друзей
class AddFriendRedirect(RedirectView):
def get_redirect_url(self,*args,**kwargs):
username = self.kwargs.get("username")
obj = get_object_or_404(UserProfileInfo,slug=username)
# print(f'OBJECT: {other}')
# print(f'Current user: {self.request.user}')
# user_profile = User.objects.get(username=username)
url_ = obj.get_absolute_url()
user = self.request.user
user_ = self.request.user.username
# user__ =
if user.is_authenticated:
print("User is authenticated")
if user in obj.friends.all():
obj.friends.remove(user)
obj.save()
else:
obj.friends.add(user)
obj.save()
return url_
И, наконец, шаблон URL
# path('profile/<str:username>/add/',views.AddFriendRedirect.as_view(),name='add_friend'),
re_path(r'^profile/(?P<username>[\w.@+-]+)/add/$(?i)',views.AddFriendRedirect.as_view(),name='add_friend'),
А теперь для пользователей с заглавными буквами в именах.
Причина, по которой я пришел к выводу, заключается в том, что что слизень в нижнем регистре, но я не могу понять, почему я получаю эту ошибку 404.
Их страница профиля, путь которой path('profile/<str:username>/',views.view_profile,name='view_profile_with_pk'),
, работает отлично, без ошибок. Я озадачен, почему это не работает.