Не удается установить пользовательский аутентификатор бэкенда django
Я пытаюсь изучить книгу django 3 на примерах, но не могу понять несколько моментов в пользовательской аутентификации django, например, почему имя пользователя и пароль передаются None и email=username и почему мы используем get_user
Вот код
from django.contrib.auth.models import User
class EmailAuthBackend(object):
#Authenticate using an e-mail address
def authenticate(self,request,username=None,password=None):
try:
user=User.objects.get(email=username)
if user.check_password(password):
return user
return None
except User.DoesNotExit:
return None
def get_user(self,user_id):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExit:
return None
в этой строке:
def authenticate(self,request,username=None,password=None):
username
и password
по умолчанию равны None, это сделано для того, чтобы убедиться, что если пользователь не отправил сюда никаких username
или password
, то по умолчанию будет None
. В противном случае, если пользователь не отправил сюда ни username
, ни password
, и не будет оператора переменной по умолчанию, будет возвращена ошибка, что this variable doesn't exist
фактически здесь, если вы уберете Assining to default statment by None, ничего не изменится, он будет работать так же, потому что если пользователь не пошлет username
или password
, try
будет работать так же.
Так что это фактически равносильно:
def authenticate(self,request,username,password):
(но с заявлениями по умолчанию это считается более безопасным)
эта строка:
def get_user(self,user_id):
- это удобный метод для получения определенного объекта User
, вы будете часто встречаться с этим методом. Он просто пытается найти объект User
в базе данных, если он находит User, то будет return this user object
, если он не находит объект User, то будет return None
Но в данной части кода get_user
метод не используется