У меня есть приложение django, которое отлично работает на python-3.6 / Django-1.11
Я пытаюсь заставить его работать на python-3.7, что подразумевает переход на Django-2.x, поэтому я выбрал Django-2.1
Первые проблемы, с которыми я столкнулся - скорее всего, не связанные с моей точкой зрения здесь, были:
- переименование
MIDDLEWARE_CLASSES
в MIDDLEWARE
и
- удаление
django.contrib.auth.middleware.SessionAuthenticationMiddleware
из этого списка, поскольку оно устарело
Только с этими изменениями по сравнению с кодом, работающим для комбо 3.6 / 1.11, мой сервер django запускается достаточно хорошо, но я не могу войти.
Я использую 2 своих пользовательских бэкэнда:
AUTHENTICATION_BACKENDS = (
'plc.plcauthbackend.PlcAuthBackend',
'mfauth.mfbackend.ManifoldBackend',
)
Используя мой код, я обнаружил, что при попытке входа в систему:
- фреймворк создает один экземпляр каждого класса (инструментарий
__init__
)
- , но при этом ни один из этих случаев не вызывается
authenticate()
, (authenticate
)
Я подозреваю некоторые изменения в соглашении о подписи authenticate
, но, похоже, не могу найти ничего уместного в документации django об обновлении до 2.x.
Вот упрощение кода первого класса аутентификации (что в моем случае должно действительно произойти).
<snip>
class PlcAuthBackend:
"""
Authenticate against PLCAPI
"""
def __init__(self, plcapi_url=config_plcapi_url):
print(f"Creating PlcAuthBackend -> {plcapi_url}")
self.plcapi_url = plcapi_url
# Required for your backend to work properly - unchanged in most scenarios
def get_user(self, user_id):
print(f"plc get_user")
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
# This is called by the standard Django login procedure
def authenticate(self, token=None):
print(f"plc authenticate")
if token is None:
return
<snip>
С этим кодом консоль сервера показывает сообщение «Создание PlcAuthBackend», но я не получаю упоминания о сообщении «plc authenticate», которое я ожидаю
Я бы приветствовал любую подсказку о том, как я мог бы попытаться решить эту проблему.