2017-11-15 9 views
2

Nehmen wir an, wir haben ein Modell namens Event mit einem Slug name. Ich möchte meine Django-App so konfigurieren, dass alle meine anderen Modelle abhängig vom Ereignis in separaten Apps isoliert werden. Zum Beispiel:Django Isolated Subdomains

"http://annualmeetup.domain.com" # in the form of "http://{}.domain.com".format(e.name) 

Wie würde ich isolierte Anwendungen, so dass meine Modelle für Benutzer, Sitzungen abgeschlossen schaffen, und andere nur die Arbeit im Rahmen der gegebenen Sub-Domain? Ich habe darüber nachgedacht, mehrere Apps für jedes Ereignis zu schreiben und dieselben Modelle über ein Befehlsskript zu kopieren, aber ich weiß immer noch nicht, wie ich eine App auf eine Sub-Domain verweisen soll.

+1

Haben Sie in Betracht gezogen, das integrierte Framework ["sites"] zu verwenden (https://docs.djangoproject.com/en/1.11/ref/contrib/sites/) –

+0

@ HåkenLid Ich habe das vorher nicht gesehen. Könnten Sie ein Beispiel zeigen? –

+0

Ich habe nicht wirklich viel Erfahrung damit. –

Antwort

4

Eine Option ist django-tenant-schemas zu verwenden, die für diesen Zweck ausgelegt ist:

Django derzeit keine einfache Möglichkeit bieten, mehrere Mieter mit der gleichen Projekt Instanz zu unterstützen, auch wenn nur die Daten unterschiedlich ist. Weil wir nicht wollen Sie viele Kopien Ihres Projekts ausgeführt wird, werden Sie in der Lage sein zu haben:

  • Mehrere Kunden auf derselben Instanz laufen
  • Geteilt und mandantenspezifische Daten
  • Mieter View- Routing (dh Sub-Domain-Mapping)

Dies wird Ihnen führen Sie für jeden Mieter (Veranstaltung, in Ihrem Fall), die jeweils mit einer eigenen isolierten Modelle separaten Datenbankschemata zu müssen. Ohne großen Aufwand können Sie im Handumdrehen Pächter (Ereignisse) erstellen - das klingt nach Ihrem Anwendungsfall.

Beachten Sie jedoch, Mieter-Schemas funktioniert nur mit Postgres.

+0

Gibt es Eine Alternative für SQLite? –

+3

Warum möchten Sie sqlite verwenden? Es ist nicht wirklich ein Backend für Produktionsumgebungen. https://sqlite.org/wenthouse.html –

0

Sie müssen nicht für jedes Ereignis separate Apps schreiben. Wenn jedes Ereignis das gleiche Schema teilt, können Sie einfach Ihre Architektur Multitenant

machen Hier sind alle Pakete dafür verfügbar. Link here

Ich persönlich empfehle django-hosts Aber es bietet keine guten Datenisolierungsfunktionen. Das ist gut, wenn Sie bereits ein bestehendes Projekt haben und nur Multitenancy einführen möchten. Wenn Sie das Projekt gerade erst starten, ist django-tenancy eine gute Option.