#25235: Class based view decoration
-------------------------------------+-------------------------------------
Reporter: zauddelig | Owner: nobody
Type: | Status: new
Cleanup/optimization |
Component: Utilities | Version: 1.8
Severity: Normal | Keywords: documentation, class
| based views, utilities, decorators
Triage Stage: Unreviewed | Has patch: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------
The class based views decoration documentation is in my opinion ugly and I
think is keeping some beginners from class based views.
Based on that ,one has three methods:
1. Use Multi Inheritance, which is both risky and dreadful, imho is too
easy to have side effects, still is the more clean solution described.
2. Use method_decorator, which is better if not that you have to wrap
every decorator function inside of it and are forced rewrite `dispatch`.
3. wrapping directly the `Klass.as_view()`, better but as documented it
seem more a problem than anything.
The advantage of the third method is that you preserve the logic of the
Classes, so that the same View can change, more or less slightly, it's
logic in different contexts.
I usually use solutions like this:
{{{
view = reduce(
lambda x, f: f(x),
(
third_decorator,
second_decorator,
first_decorator,
),
ViewKlass.as_view()
)
}}}
The good thing is that you can wrap group of common decorators in a single
iterable.
I don't know if it would be better to have a `django.utils` to do this or
just add to documentation this or some similar method.
--
Ticket URL: <https://code.djangoproject.com/ticket/25235>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/052.220e7866060291e0deb821fbda1ade5f%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.