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()stattrender()zu verwenden hat einige VorteileFBV 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
objectheißen (und demzufolge das Objekt eines List-Views nichtobject_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.