Метод аутентификации Django не работает на пользовательской модели

#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, настраивающий аутентификацию

Пользовательская модель пользователя

Как расширить пользовательскую модель