Документация: https://docs.djangoproject.com/en/1.7/topics/auth/default/#django.contrib.auth.login
Когда вы вручную регистрируете пользователя, вы должны вызвать функцию authentication() перед вызовом функции login(). authentication() устанавливает атрибут для пользователя, отмечая, какой сервер аутентификации успешно аутентифицировал этого пользователя (подробности см. в документации по серверу), и эта информация потребуется позже в процессе входа в систему. Если вы попытаетесь напрямую войти в пользовательский объект, полученный из базы данных, возникнет ошибка.
Итак, почему именно authenticate
и login
2 отдельные функции? Насколько я понимаю, authenticate
просто проверяет данные для входа. login
возьмет объект пользователя и установит куки. Единственная причина, по которой я могу думать, что они разделены, заключается в том, что, возможно, вы можете поместить разные объекты пользователя, скажем, у пользователя было объединено 2 учетных записи. Возможно, вы хотите сначала подтвердить адрес электронной почты. Поэтому это отдельные функции, а login
не обертывает authenticate
?