#python #django #django-authentication
Вопрос:
Я создаю профиль пользователя, используя систему аутентификации django (из django.contrib.auth.модели импортируют пользователя). Перед этим я пытаюсь расширить поле пользователя, используя дополнительное поле (т. е. профиль пользователя= генеральный директор/разработчик/руководитель отдела маркетинга) в models.py. Вот мой models.py файл
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class extendeduser(models.Model):
userprofile_choice=(
('ceo', 'ceo'),
('developer', 'developer'),
('marketinghead', 'marketinghead'),
)
userprofile=models.CharField(choices= userprofile_choice, max_length=255, blank=False)
user=models.OneToOneField(User, on_delete=models.CASCADE)
def __str__(self) -> str:
return self.userprofile
теперь я успешно регистрирую нового пользователя. Теперь я создал различные html-страницы на основе их профиля. Поэтому во время входа в систему я беру дополнительный ввод от пользователя, который является профилем пользователя. И на основе этого я создал views.py для перенаправления пользователя в нужное место. Вот мой views.py файл :-
def login(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
uf = request.POST['userprofile']
user = auth.authenticate(username=username, password=password)
user_profile = extendeduser.objects.filter(user = user)
# print(user_profile[0])
# print(uf)
# print(user.get_username)
# print(user.__dict__)
#print(user.get_userprofile)
if user is not None:
if uf==user_profile[0]:
if uf=='ceo':
auth.login(request, user)
messages.success(request, "You are logged-In")
return redirect('wtoday')
elif uf=='developer':
auth.login(request, user)
messages.success(request, "You are logged-In")
return redirect('swhome')
elif uf=='marketinghead':
auth.login(request, user)
messages.success(request, "You are logged-In")
return redirect('sswhome')
else:
messages.warning(request, 'Invalid Credentials!!')
return redirect('login')
else:
messages.warning(request, 'Invalid Credentials!')
return redirect('login')
else:
messages.warning(request, 'Invalid Credentials')
return redirect('login')
return render(request, 'accounts/login.html')
Все в порядке, но эта строка кода «if uf==user_profile[0]:» не работает. в основном это проверка того, что поле «userprofile» любого конкретного пользователя, которое хранится в базе данных, такое же, как во время входа в систему, или нет. Я говорю, что эта строка кода не работает, потому что, когда я комментирую эту строку, а затем, не проверяя профиль пользователя из базы данных, я просто перенаправляю их на основе данных, которые он вводит во время входа в систему, тогда это работает. Но я этого не хотел.
Пожалуйста, помогите мне выбраться!!
Ответ №1:
Вы не можете сравнивать uf
и userprofile[0]
, потому uf
что это строка и userprofile[0]
extendeduser
объект. Может if uf == str(userprofile[0]):
быть, это то, чего ты хочешь.
Комментарии:
1. да, именно то, чего я хотел.. Это работает идеально. Большое вам спасибо @Allen Shaw.