Seite 1 von 1

[Django] SITE_ID dynamisch in middleware setzten?

Verfasst: Donnerstag 29. Dezember 2011, 14:09
von jens
In PyLucid nutzte ich ja intensiv das Site Framework um mehrere Seiten mit einer Installation zu beantworten, die alle auf die selben Datenbank Daten zugreifen.

Doch ich hab mir überlegt, das es doch schön wäre, wenn man nicht jeweils eine Instanz pro SITE_ID erstellen müßte, sondern per Middleware dynamisch die SITE_ID zu setzten.

Dann müßte man nur eine neue Domain in die SITE-Tabelle eintragen und gut. Die Middleware schaut welche aktuelle Domain genutzt wird und setzt die SITE_ID...

Was meint ihr?

Natürlich ist es nicht so toll, die SITE_ID in der settings dynamisch zu ändern. Vielleicht könnte man es ja so machen, das man im settings Objekt die statische SITE_ID durch eine Funktion ersetzt?

EDIT: Hab dazu ein paar Sachen gefunden:
https://bitbucket.org/uysrc/django-dyna ... s/overview
http://stackoverflow.com/questions/5583 ... -good-idea

https://code.djangoproject.com/ticket/4438
https://groups.google.com/group/django- ... 92c72ed59/
https://groups.google.com/group/django- ... de7944de3/

Re: [Django] SITE_ID dynamisch in middleware setzten?

Verfasst: Donnerstag 29. Dezember 2011, 18:49
von jens
Hab mal angefangen: https://github.com/jedie/django-tools/b ... micSite.py

Ziel ist es, das ein Zugriff über Site.objects.get_current() oder über settings.SITE_ID überall funktioniert.

Erste Tests funktionieren. Aber über DynamicSiteId() bin ich noch nicht so recht glücklich.

Verbesserungsvorschläge ?

Re: [Django] SITE_ID dynamisch in middleware setzten?

Verfasst: Samstag 31. Dezember 2011, 13:36
von jens
Mir ist noch eingefallen, das man einen Fallback auf z.B. os.environ["SITE_ID"] machen könnte. Die variable könnte man in manage.py setzten, damit man auch außerhalb von Requests arbeiten kann.

Re: [Django] SITE_ID dynamisch in middleware setzten?

Verfasst: Montag 2. Januar 2012, 11:54
von jens
So, hab nun DynamicSiteMiddleware im praktischen Einsatz und sieht so aus, das es gut funktioniert ;)

Ist in der neuen django-tools v0.20.0 enthalten: http://pypi.python.org/pypi/django-tools/

Re: [Django] SITE_ID dynamisch in middleware setzten?

Verfasst: Mittwoch 25. Januar 2012, 01:39
von jens
Habe nun die Sache noch ein wenig erweitert: Nun kann man "domain name aliases" angeben. Einmal als normaler String z.b.: "neuer_server.foobar.tld" oder als regex: ".*?\foobar\.tld"

Ist ganz nett, wenn man einen neuer Server hat kann man so vorgehen:

Dump vom alten einspielen.
sub-domains einrichten und auf neuen Server IP zeigen lassen
alias einrichten, damit die sub-domains nicht auf "fallback" SITE_ID zurück fallen, sondern der richtigen Seite zugewiesen werden...

Ich hab noch unittest hinzugefügt: https://github.com/jedie/django-tools/b ... e/tests.py

Damit Änderungen auch im Multi-Threaded Umfeld funktionieren, nutzte ich wieder https://github.com/jedie/django-tools/b ... c_cache.py

Mehr Info, zu Dynamic SITE_ID: https://github.com/jedie/django-tools/b ... DME.creole