2010-07-11 11 views
9

Ich bin mir bewusst, ich kann "überall in meinem Python-Pfad speichern" und alles, aber was ist ein organisiertes Muster, das ich verwenden kann, um Middleware-Klassen für mein Projekt zu speichern?Django: Was ist der ideale Ort, um projektspezifische Middleware zu speichern?

ich mein Projekt Stammverzeichnis und Projektverzeichnis in dem sys Pfad durch mod_wsgi anhängen:

sys.path.append('/srv/') 
sys.path.append('/srv/workarounds/') 

Letztererletztereletzteres Linie Wurzel des Projektes zu sein. Angenommen, ich möchte diese Middleware-Klasse anwenden: http://djangosnippets.org/snippets/1179/

Würde ich den Snippet-Inhalt einfach in eine Datei middleware.py kopieren und in meinem Projektstamm ablegen? Erstellen Sie ein Verzeichnis für Middleware, fügen Sie dieses Verzeichnis meinem Python-Pfad hinzu?

Antwort

5

Meine übliche Layout für eine django Website ist:

projects/ 
templates/ 
common/ 
local/ 

Wo:

  • Projekte Ihr Hauptprojekt enthält und alle anderen
  • gemeinsame Dinge enthält, die Sie an unterschiedlichen Standorten gemeinsam nutzen können, oder sind zumindest nicht projektspezifisch, wie wenn du django-profile und django-registrierung herunterladen musst anstatt direkt in python/site-packages
  • Vorlagen enthält nur
  • lokale enthält Dinge, die spezifisch für die aktuelle Maschine sein werden, so dass Sie ordnungsgemäß getrennt Daten haben können, wie Datenbank-Speicherort und Passwort - ich dann die maschinenspezifischen Versionen (zB "machine1 -localconfig.py ") an die lokalen/localconfig.py und dann können‚import localconfig‘in settings.py

ich in der Regel setzen Middleware, die in einem Projekt projektspezifisch ist, und Middleware, die gemeinsam nicht projektspezifisch ist/middleware/

Stellen Sie sicher, das Vorlagenverzeichnis an der richtigen Stelle in den Einstellungen (oder höchstwahrscheinlich localconfig.py und dann in den Einstellungen zu importieren) und ma hinzuzufügen kse sicher, die Projekte, allgemeine und lokale Verzeichnisse zu Ihrem PYTHONPATH hinzuzufügen.

4

Wenn Sie nur ein paar eng gekoppelte Middleware-Klassen haben, fügen Sie sie in ein middleware.py-Modul unter dem App-Stammverzeichnis ein. (So ​​machen es die django.contrib Apps - siehe App Middleware der Sitzungen here).

Wenn Sie viele verschiedene Middleware-Klassen haben, erstellen Sie ein Middleware-Paket mit Submodulen der zugehörigen Middleware-Klassen. Wenn Sie jedoch in dieser Situation landen, überlegen Sie, wie Sie Ihr Projekt in mehrere Mini-Apps umgestalten können, die alle einen bestimmten Bedarf lösen (und Open-Source-Quellen :)).

Persönlich habe ich ein gemeinsames django-Paket, wo ich gemeinsame Middleware (wie die Ihre verbundenen LoginRequiredMiddleware Klasse) in ein middleware Paket dump. Wenn dies im Kontext Ihres Projekts sinnvoll ist, würde ich es sehr empfehlen. Es hat meine unzähligen Stunden der Duplizierung und Fehlerbehebung gerettet. django-common und django-annoying sind gute Beispiele für diese Art von Projektlayout

Verwandte Themen