Запуск разных версий Django, но совместное использование аутентификации - PullRequest
0 голосов
/ 07 января 2010

Совершенно новый для Django. У нас есть устаревший проект django, использующий django 0.96x, который выполняет аутентификацию, ldap и т. Д., И он довольно сложный, поэтому мы не хотим переписывать этот код.

Мы хотим добавить решение для форума (готовое), но все те, которые я видел до сих пор, требуют django 1.x

Я пытаюсь выяснить, как заставить это работать, и я сузил это до следующего:

  1. Используйте старое решение для форума, которое работает с django 0.96 (существует?)
  2. Попробуйте установить исправление для форума, чтобы сделать его "обратно совместимым" с 0,96 (возможно, кошмар)
  3. Используйте два разных djangos: 0.96 и 1.x и (поскольку мы используем Apache w / mod_python) имеют две разные директивы Location; настройте PYTHONPATH для каждого (или используйте virtualenv и т. д.)

Но будет ли работать вариант № 3? Я не знаю достаточно о том, как работают django.contrib.auth и его друзья, так что если я запустил две разные версии django, пользователь останется в системе? Я не упоминал, что пытался исправить наш 0.96 проект, чтобы довести его до 1.x, но у нас действительно нет времени, чтобы сделать это.

Есть предложения?

Ответы [ 3 ]

1 голос
/ 07 января 2010

Это возможно, но может быть довольно больно делать вариант 3.

Как насчет варианта 4: прикусить пулю и перейти на Django 1.1.1. Я сделал это с парой сайтов 0.97pre, и это заняло меньше времени, чем я думал. Самая большая боль была связана с админским материалом. Вместо того, чтобы идти с отдельными admin.py файлами, мы просто помещаем классы администратора непосредственно под классами модели.

Я использую Mercurial для своей DVCS, и я просто клонировал, взламывал, объединял, и это работало. На сайт ушло около 3-5 часов, и это включало в себя несколько пользовательских шаблонов.

0 голосов
/ 08 января 2010

Можно выставить таблицы Django 0,96 на 1,1 - вы можете использовать неуправляемые модели, обернутые вокруг представлений базы данных.Другими словами, вы выдаете:

CREATE VIEW auth_user AS SELECT * из django096db.auth_user;(и аналогичный cmd для других таблиц)

и затем Django 1.1 синхронизируется с 0,96 (при условии, что 0,96 таблицы совместимы с 1.1, я не проверял это).

0 голосов
/ 07 января 2010

Статус входа пользователя сохраняется с помощью сеансов. Насколько я могу судить по сравнению транка с источником 0.96, сеансы фиксируются в cookie одинаково, а auth сохраняет идентификатор пользователя и серверную часть одинаковым образом, при условии, что два приложения используют одинаковое хранилище сеанса и находятся в одном домене, это должно работать. (Просто чтобы быть в безопасности, я бы не стал использовать безопасные куки в случае, если изменилась логика бэкэнда - я не проверял эту часть.)

Однако в 0.96 не было подключаемых хранилищ сессий, как в современном Django. Возможно, чтобы текущая версия Django работала с вашими сессиями 0.96, вам нужно написать бэкэнд сессий для текущего Django, который подключается к базе данных 0.96 и управляет сессиями там. Я не уверен, насколько хорошо это сработает.

...