Допустим что сайт, которым пользуются ваши пользователи, написан на Joomla, но для создания нового продукта для вашей аудитории вы выбрали связку Python/Django.  Как следствие, возникает необходимость использовать в Django учетные записи пользователей из базы данных Joomla. Проблема однако в том, что Joomla и Django используют разные алгоритмы хэширования паролей, поэтому просто скопировать учетные записи не получится. Почитав документацию Django, stack overflow и потратив некоторое время, получилось нижеописанное решение, которое по максимуму использует рекомендуемые практики разработки под Django. Данное архитектурное решение может вам не подойти, см. обсуждение в комментариях. Чтобы понимать, что происходит в нижеприведенных примерах, вы должны обладать некоторым пониманием архитектуры Django. Также я предполагаю, что вы знаете, как развернуть Django проект, поэтому не описываю этот процесс. Код скопирован из рабочего проекта но его легко будет подстроить под ваш проект с минимумом изменений.  Вероятно, в следующей мажорной версии Django данный код может поломаться, однако сам принцип решения останется тем же самым. В данном руководстве я не описываю фронтэнд системы авторизации, так как: для подключения базы данных Joomla в наш Django проект, добавьте следующий код в файл с настройками проекта /project_name/settings.py: При необходимости, в этом же файле с настройками проекта, можно включить логирование запросов к БД:  добавьте вашу модель в users/models.py: Далее нам необходимо убедиться, что модель будет обращатся к правильной БД. Для этого добавим в проект роутер для запросов к разным БД, который будет перенаправлять запросы от модели JoomlaUser к её родной базе данных.  Создайте файл "db_routers.py" в основной папке проекта (там же, где лежит ваш "settings.py"): зарегистрируйте новый роутер в settings.py: Теперь вы можете достать учетную запись из старой БД.
Запустите терминал Django и попробуйте вытащить существующего пользователя: python manage.py shell Если все работает (вы видите пользователя), то переходим к следующему шагу. Иначе смотрите на вывод ошибок и исправляйте настройки. Joomla не хранит пароли пользователей, но их хэш, например
$2y$10$aoZ4/bA7pe.QvjTU0R5.IeFGYrGag/THGvgKpoTk6bTz6XNkY0F2e Начиная с версии Joomla v3.2, пароли пользователей зашифрованы с помощью алгоритма BLOWFISH. Так что я загрузил python код с этим алгоритмом: И создал функцию для проверки паролей в файле users/backend.py: Внимание! Joomla версии ниже чем 3.2 использует другой метод хеширования (md5+salt), так что эта функция не будет работать. В таком случае почитайте
обсуждение на Stackoverflow и создайте функцию для проверки хэша, которая будет выглядеть примерно так: К сожалению у меня сейчас нет под рукой базы пользователей из старой версии Joomla, поэтому я не смогу протестировать эту функцию для вас. Теперь вы готовы создать Django бэкенд для авторизации пользователей из Joomla проекта. прочитайте, как модифицировать систему авторизации Django Зарегистрируйте новый бэкенд (еще не существующий) в project/settings.py: Создайте бэкенд авторизации пользователей Joomla в users/backend.py Поздравляю — теперь пользователи вашего существующего Joomla сайта могут использовать свои учётные данные на новом сайте/приложении. По мере авторизации активных пользователей через новый интерфейс, они будут по одному скопированы в новую базу данных. Как вариант, вы можете не захотеть копировать сущности пользователей из старой системы в новую. В таком случае вот вам ссылка на статью, в которой описывается, как в Django заменить модель пользователя по умолчанию на свою (вышеописанную модель JoomlaUser). Конечное решение, переносить или не переносить пользователей, принимайте на основе того, в каких взаимоотношениях будут новый и старый проект. Например, где будет происходить регистрация новых пользователей, какой сайт/приложение будет основным, и т.д. Теперь пожалуйста добавьте соответствующие тесты и документацию, покрывающие новый код. Логика данного решения тесно переплетена с архитектурой Django и не очень очевидна, поэтому если вы не сделаете тесты/документацию сейчас, поддержка проекта в будущем усложнится. Программист