Wichtige Konzepte für die Arbeit mit Django

  • virtualenv für die Isolation der Projekte nutzen

  • pip zum Installieren von Python Paketen nutzen

  • Django “Projekte” bestehen im Kern nur aus der Konfiguration in settings.py

    • Diese verweist auf die zentrale URLConf (ROOT_URLCONF)
    • Sie enthält die Liste aller installierten Apps, die nicht zwingend im Projektverzeichnis sein müssen sondern aus dem PYTHONPATH geladen werden können
    • Eine Konstante wie zum Beispiel SITE_ROOT nutzen, um den Pfad zum Konfigurationsverzeichnis zur Laufzeit zu ermitteln
    • Zusätzliche Dateien wie zum Beispiel local_settings.py für das Trennen der Einstellungen benutzen
    • Eventuell paster create zur Erstellung von Projekten nutzen
  • Das Verzeichnis einer App sollte immer alle nötigen Komponenten enthalten

    • URLConf (urls.py)
      • In der URLConf immer “named URLs” benutzen
    • Models (models.py)

    • Templates (templates/APPNAME/*.html)
      • Die Verzeichnisstruktur so aufbauen, dass die Templateloader auch richtig funktionieren
    • Templatetags (templatetags)

    • Views (views.py)

    • Fomulare (forms.py)

    • Fixtures (Verzeichis fixtures)

    • Tests (tests.py)

    • ...

  • Innerhalb einer App immer relative Imports benutzen (siehe PEP 328)

  • Falls nötig eine App in Python Packages für Models, Views oder Tests aufteilen

  • Models

    • Für models.DateTimeField nicht auto_add und auto_add_now Argumente benutzen, sondern die Logik selbst implementieren

    • Methoden möglichst flexibel überschreiben:

      def save(self, *args, **kwargs):
          # Code, der beim Speichern ausgeführt wird
    • Ein QuerySet benutzt “lazy loading” und kann immer um neue Bedigungen erweitert werden, so lange es noch nicht ausgegeben oder ein Iterator benutzt wurde

    • QuerySet.count() statt len(QuerySet) benutzen

    • Mit einem “related manager” auf das andere Model einer Relation zugreifen

    • models.Q für OR Queries oder Factories nutzen

    • Komplexe Queries und Funktionen als Methoden am Model implementieren

  • Views

  • Templates

    • Keine Logik in Templates implementieren
    • block Tags können auch gut zum Kontrollieren von Templates benutzt werden, die man erweitert hat (Beispiel toggle_login Block)
    • 404.html und 500.html anlegen (siehe Fehlerbehandlung)
  • Debugging

  • Tests

  • Nicht davor zurückschrecken eine Middleware zu schreiben

Vorheriges Thema

Deployment

Nächstes Thema

Über dieses Projekt

Diese Seite