J'ai deux projets Django sur le même serveur. Le premier a été lancé il y a plusieurs mois et a depuis recueilli des centaines de comptes d'utilisateurs. Le deuxième projet est lancé dans quelques jours, et nous aimerions que le deuxième projet permette aux utilisateurs de la première application de s'authentifier en utilisant les mêmes informations d'identification. Dans un premier temps, j'allais simplement vider la table user du premier projet dans le second projet, mais cela ne permettait pas une solution synchrone (l'utilisateur crée un compte sur le projet B, n'a pas alors accès au projet A). Est-ce que Django a un moyen de changer nativement les noms de bases de données (puisqu'ils sont sur le même serveur) pour l'authentification de l'utilisateur, puis de revenir à la base de données d'origine une fois l'authentification terminée? Si ce n'est pas le cas, quelle serait, selon vous, la meilleure solution pour mon problème? Aussi - nous utilisons MySQL.La meilleure façon de fusionner deux tables utilisateur de projets Django?
Répondre
Si vous attendez un certain temps, par la suite Django obtenir le soutien de plusieurs bases de données.
Mais pour l'instant, je pense que la meilleure solution à votre problème serait de synchroniser les tables d'utilisateur de la base de données deux après que les modifications soient faites. Vous pouvez utiliser les signaux de soutien pour gérer ceci:
from django.db import models
def user_post_save(sender, instance, **kwargs):
... run script to synchronize tables ...
models.signals.post_save.connect(user_post_save, sender=User)
Vous ne pourrez pas utiliser le ORM ... mais le dumping de la table source, puis laisser tomber la destination et l'importation dans ce serait relativement indolore. Cela pourrait certainement causer des problèmes de synchronisation, mais les transactions résoudraient la plupart du temps. Si les deux sites se chevauchent, je pourrais envisager de mettre en place un verrou en écriture sur la table Utilisateur lors de la mise à jour, et mettre en place une sorte de cycle spin-wait sur la méthode save() du modèle User (ou le signal pre_save) pour vérifier un verrou avant de terminer la sauvegarde. Cela garantirait que le signal post_save ne sera pas envoyé lors d'une synchronisation.
Merci - cela ressemble à la meilleure solution pour l'instant. –
Django n'est actuellement pas compatible avec plusieurs bases de données (il existe un wikipage à ce sujet).
Une autre approche consisterait à écrire un module user authentication personnalisé pour le deuxième site Web qui effectuera des appels SQL à la première base de données de sites Web pour fournir la connexion. Lorsqu'un utilisateur du premier site se connecte au second Django, il créera un utilisateur sur le deuxième site. Mais cela pourrait avoir quelques problèmes avec le changement de nom complet et d'adresses e-mail, donc il ne pouvait être utilisé que pour avoir un nom d'utilisateur et un mot de passe. De plus, vos utilisateurs devront s'inscrire sur le premier site pour accéder à la seconde, vous aurez donc besoin de personnaliser votre inscription pour vous inscrire sur le premier.
Je suis sûr qu'il serait possible de convaincre django.auth d'utiliser la base de données A avec un peu de piratage, mais la base de données B ne pourra pas utiliser l'ORM pour fournir des clés étrangères à la table utilisateur de DB A). –
Cela va probablement me tirer dessus; mais vous pouvez créer la table utilisateur du nouveau projet comme une simple vue du premier projet:
DROP TABLE proj2.users;
CREATE VIEW proj2.users AS SELECT * FROM proj1.users;
Vous pouvez USEE l'application Multidb de travailler avec de nombreux db que vous aimez
soutien de plusieurs bases de données est maintenant disponible.
- 1. Fusionner deux tables
- 2. fusionner deux tables avec la même structure
- 3. Comment puis-je fusionner deux tables MySQL?
- 4. meilleure façon de gérer JSON dans django
- 5. C# meilleure façon de comparer deux heures de la journée
- 6. Fusion de deux tables
- 7. Comment fusionner deux référentiels git contenant des projets Xcode
- 8. Meilleure façon d'organiser plusieurs projets dans AccuRev
- 9. Fusionner plusieurs projets SVN
- 10. Quelle est la meilleure façon de diviser deux objets TimeSpan?
- 11. Liaison de deux projets
- 12. La meilleure façon d'utiliser un contrôle sous deux formes
- 13. Meilleure façon de gérer les variables de requête dans Django
- 14. reliant deux tables
- 15. Django: Comment fusionner deux jeux de requête liés dans Django 0.96?
- 16. La meilleure façon de fusionner plusieurs conteneurs STL, en supprimant les éléments en double?
- 17. Meilleure façon d'intégrer deux sites ASP.NET
- 18. La meilleure façon de « matérialiser vue »
- 19. Quelle est la meilleure façon de gérer I18N dans les tables de recherche?
- 20. La meilleure façon de fusionner des chaînes hexadécimales en C++? [fortement édité]
- 21. Meilleure façon de travailler avec les images temporaires dans Django?
- 22. une meilleure façon de faire ajax dans django
- 23. Meilleure façon de modéliser l'amitié d'un utilisateur avec différentes entités?
- 24. Meilleure façon de créer des interfaces utilisateur sophistiquées dans .NET
- 25. Quelle est la meilleure façon de mapper les urls principaux dans un projet django?
- 26. Projets Django SAAS
- 27. Fusionner deux types DateTime en C#
- 28. Comment joindre (fusionner?) Plusieurs tables?
- 29. Fusionner deux listes de listes - Python
- 30. Meilleure façon de vérifier la version du projet dépendant
Hrm. Les options ci-dessous sont "NON", "PEUT-ÊTRE" et "ATTENDRE". Pas rassurant. –