Django views the right way

Der Artikel Django views the right way von Luke Plant enthält eine ganze Reihe von best practice recommendations für Django-Views.

Einige – mir interessant erscheinende – Punkte seien herausgegriffen:

  • TemplateResponse() statt render() zu verwenden hat einige Vorteile

  • FBV statt CBV benutzen – er nennt viele Argumente dafür und weist darauf hin, dass die Einsparung von Boilerplate-Code vor allem die Lesbarkeit verbessert, mehr noch als das Schreiben zu erleichtern

  • django-urlconfchecks kann prüfen, ob die urls.py-Einträge zu den Views passen bzgl. Anzahl und Typen der View-Parameter (die statischen Type-Checker können das nicht)

  • Das request-Objekt eines Views sollte nicht herumgereicht werden, vor allem nicht zu den models.

  • Das Objekt eines Detail-Views im context sollte nicht object heißen (und demzufolge das Objekt eines List-Views nicht object_list).

  • Die Paginierung längerer Ausgaben kann man standardisieren:

    context = { …
            } | paged_object_list_context(request, products, paginate_by=5)
  • Sehr dynamische Formulare sollte man nicht als Form definieren, sondern zu Fuß definieren.

  • Precondition checks mit Decorators sind eine gute Idee – einige nützliche Beispiele werden dafür gegeben. Die Nutzung von @functools.wraps(view_func) ist ratsam!

  • Mehrere Decorators eines FBV kombinieren sich gut, mehrere Mixins eines CBV aber eher nicht!

  • Gute Hinweise, wie man sicherheitsrelevante Decorators in einer App erzwingen kann

  • Wie kann man Views „dünn“ halten?

  • Benutzerbezogene Queries sollte man über das Benutzerobjekt laufen lassen: user.bookings.in_basket()

  • Ein Service-Layer wird hier abgelehnt.

  • Optimierungen (wie select_related & Co.) lassen sich nur schwerlich aus dem Views-Layer heraushalten, eine ordentliche separation of concerns ist praktisch nicht möglich.