Wir haben zwei Anwendungen.
TheApp ist eine unglaubliche App, die Kunden lieben. Jeder Kunde bekommt seine eigenen Instanz der Anwendung, dh jeder Kunde verwendet eine andere Datenbank (Name, Benutzer, Passwort). Die Datenbankverbindung sollte über die Domäne entschieden werden, aus der der Anfrage kommt herein.
%Vor%Sollte TheApp-Instanzen für die Kunden erstellen / löschen können. Daher muss die neue Datenbank eingerichtet und die Konfiguration an irgendwo geschrieben werden. Der Weg, der entscheidet Welche DB für die eingehende Anfrage verwendet wird, sollte gut funktionieren und leicht zu verwalten sein.
Welcher ist der beste Weg zu entscheiden, welche Datenbankverbindung für eine Instanz verwendet werden soll? Was macht es? das beste? Was skaliert am besten?
Ich lese Zeug und das sind die Wege, auf die ich gekommen bin:
Jeder Kunde erhält seine eigenen settings.py mit den Datenbank-Zugangsdaten. Einstellungen kann einige allgemeine Dinge aus einer freigegebenen Einstellungsdatei erben.
Für jede neue Einstellungsdatei muss eine neue wsgi-Instanz der Anwendung gestartet werden. Dies kann sich negativ auf viele Kunden auswirken? Erstellen Sie auch die Apache-Vhost-Dateien ist hässlich.
Ich könnte es machen wie
%Vor% und setzen THE_CURRENT_DB
irgendwo (Middleware Thingy?) pro Anfrage. Aber es scheint hässlich zu sein, dies zu tun
überall. Auch die settings.py/app muss jedes Mal neu geschrieben werden, wenn ein Kunde seine bekommt
Instanz.
Ich habe noch nicht nachgesehen, ob ich im Router auf Informationen über die Anfrage zugreifen kann, aber wenn ja, könnte ich vielleicht entscheiden, welche der dbs in settings.py verwendet werden soll. So'ne Art wie Ссылка , aber nicht nach Modell aber pro Anfrage.
Ich hatte gerade die Idee, dass vielleicht die dB-Einstellung in einer Middleware geändert werden könnte. Noch nicht Ein Blick, wie Middleware in Django funktioniert und was dort möglich ist.
Da ich mit Django ziemlich neu bin, habe ich vielleicht einige Punkte verpasst oder einige von ihnen sind einfach total albern und schlecht. Was würdest du tun?
Nun. Weil ich denke, Trennung von Sachen ist gut. Und wenn schlimme Dinge passieren, sind nicht alle plötzlich betroffen.
Dies ist leicht mit Middleware und Postgres Namespaces möglich. Hier ist ein schnelles und schmutziges Beispiel mit absolut keiner Fehlerbehandlung:
%Vor%Wenn diese Middleware aktiviert ist, kann jeder Kunde vollständig getrennte Daten haben, und es ist keine Mopery erforderlich, damit es funktioniert. Es gibt jedoch ein paar Dinge zu wissen:
Das ist eines dieser Szenarien, die die Schwäche des django Konfigurationsmoduls (Einstellungen) zeigen. Es gibt keinen "django-unterstützten" Weg, dies zu tun.
Ich denke, Sie könnten sich für eine Option entscheiden, die nur minimale Auswirkungen auf die Codepflege und Portabilität hat. Also schlage ich vor:
Tags und Links python django database-connection