2010-01-07 7 views
0

Nouveauté de django. Nous avons un projet django hérité utilisant django 0.96x qui fait l'authentification, ldap, etc., et il est assez impliqué donc nous ne voulons pas réécrire ce code.Exécution de différentes versions de Django mais partage d'authentification

Nous voulons ajouter une solution de forum (sur étagère), mais tous ceux que je l'ai vu jusqu'à présent nécessitent 1.x django

J'essaie de comprendre comment obtenir ce travail et je « ai réduit à ce qui suit:

  1. Utilisez une ancienne solution de forum qui fonctionne avec/django 0,96 (ce que cela existe?)
  2. Essayez de patcher une solution de forum pour le rendre « rétrocompatible » avec 0,96 (cauchemar possible)
  3. Utilisez deux djangos différents: 0.96 et 1.xa nd (puisque nous utilisons Apache w/mod_python) a deux directives de localisation différentes; ajuster PYTHONPATH pour chacun de manière appropriée (ou utiliser virtualenv, etc.)

Mais l'option 3 fonctionnera-t-elle? Je ne sais pas assez comment django.contrib.auth et ses amis travaillent, donc si je cours deux versions différentes de django, l'utilisateur restera-t-il connecté? Je n'ai pas mentionné essayer de patcher notre projet 0.96 pour l'amener à 1.x mais nous n'avons pas vraiment le temps de le faire.

Des suggestions?

Répondre

1

C'est possible, mais il peut être assez pénible de faire l'option 3.

Que diriez-vous de l'option 4: mordre la balle et passer à Django 1.1.1. Je l'ai fait avec quelques sites 0.97pre et cela m'a pris moins de temps que je ne le pensais. La plus grande douleur était de gérer des trucs d'administration. Au lieu d'utiliser des fichiers admin.py distincts, nous plaçons simplement les classes Admin directement sous les classes Model. J'utilise Mercurial pour mon DVCS et j'ai juste cloné, piraté, fusionné et cela a fonctionné. Il a fallu environ 3 à 5 heures par site et cela incluait une balise de balise personnalisée.

+0

Oui, nous n'avons peut-être pas d'autre choix que de le faire ;-) – Rob

0

L'état de connexion d'un utilisateur est stocké à l'aide de sessions. Pour autant que je sache, en comparant le tronc à la source 0.96, les sessions sont affectées à un cookie de la même manière, et auth stocke l'ID utilisateur et le backend de la même manière, aussi longtemps que les deux applications utilisent le même stockage de session. sont sur le même domaine, cela devrait fonctionner. (Pour être sûr, je n'utiliserais pas de cookies sécurisés si la logique du backend avait changé - je n'ai pas vérifié cette partie.)

Cependant, 0.96 ne proposait pas de magasins de session connectables comme le fait Django moderne. Probablement, pour obtenir une version actuelle de Django pour travailler avec vos sessions 0.96, vous devez écrire un backend de session pour le Django actuel qui se connecte à la base de données 0.96 et manipule les sessions là. Je ne suis pas sûr à quel point cela fonctionnerait, cependant.

0

Il est possible d'exposer les tables Django 0.96 à 1.1 - vous pouvez utiliser des modèles non gérés entourant les VIEWs de la base de données. En d'autres termes, vous émettez:

CREATE VIEW auth_user AS SELECT * à partir de django096db.auth_user; (et cmd similaire pour les autres tables)

et alors Django 1.1 est synchronisé avec 0.96 (en supposant que 0.96 tables sont compatibles avec 1.1, je n'ai pas vérifié cela).

Questions connexes