#python #django
#python #django
Вопрос:
Я пытаюсь встроить метод authenticate() для входа сотрудников в систему, но это, похоже, не работает. Я не использовал модель пользователя по умолчанию, предоставленную django, вместо этого я использовал здесь своего собственного сотрудника модели.
Вот что у меня есть в моем views.py
def login(request):
if request.method == 'POST':
password = request.POST['password']
emailid = request.POST['email']
employee = auth.authenticate(username=emailid,password=password)
if employee is not None:
auth.login(request,employee)
return render(request,'register/html')
else:
messages.error(request,'Email id dosent exist')
return redirect('login')
else:
return render(request,'employee/login.html')
в то время как мой пользовательский код выполняет аутентификацию
def login(request):
if request.method == 'POST':
password = request.POST['password']
emailid = request.POST['username']
if Employee.objects.filter(firstname=emailid).exists():
if Employee.objects.filter(password=password):
messages.success(request,'Loged Out')
return redirect('vacant-rooms')
else:
messages.error(request,'Wrong emailid')
return redirect('login')
else:
messages.error(request,'wrong password')
return redirect('login')
else:
return render(request,'employee/login.html')
Вот моя модель
class Employee(models.Model):
firstname = models.CharField(max_length=15)
lastname = models.CharField(max_length=15)
age = models.IntegerField()
sex = models.CharField(max_length=10)
phoneno = models.IntegerField()
emailid = models.CharField(max_length=25)
address = models.CharField(max_length=50)
salary = models.IntegerField()
designation = models.CharField(max_length=10)
password = models.CharField(max_length=10)
aadharno = models.CharField(max_length=15)
datejoined = models.DateField(default=timezone)
Возможно, это глупый вопрос, но не работает ли buit в аутентификации, потому что у меня нет поля имени пользователя в моей модели?
Ответ №1:
Я думаю, вам не следует этого делать. В Django уже есть пользовательская инфраструктура, и для использования таких функций, как authenticate, вам необходимо наследовать один из классов AbstractUser или AbstractBaseUser . Если вы просто определяете такие модели, вам придется проделать большую часть работы, которую уже проделал Django, и я определенно не рекомендую это. Я оставляю некоторую полезную документацию и статьи ниже. Если вам нужна какая-либо помощь, напишите комментарий, и я смогу помочь, насколько смогу.
Официальный документ Django, настраивающий аутентификацию