Thank you, I didn't know that! -- Best Regards, Valentin Golev Lead Developer r00, http://r00.ru
http://valyagolev.net +7 921 789 0895, avaiable 12:00-18:00 MSK 2010/10/19 Łukasz Rekucki <[email protected]>: > On 19 October 2010 21:21, Valentin Golev <[email protected]> wrote: >> Thank you! >> >> Does python's super really works the way like in the last option? > Yes, it should call dispatch() from the next class in MRO. So if you > place it at the start, like this: > > class MyView(LoginRequiredMixin, TemplateView): > pass > > It should work as expected. > >> >> -- >> Best Regards, >> Valentin Golev >> Lead Developer >> r00, http://r00.ru >> >> http://valyagolev.net >> +7 921 789 0895, avaiable 12:00-18:00 MSK >> >> >> >> 2010/10/19 Łukasz Rekucki <[email protected]>: >>> On 19 October 2010 19:06, Valentin Golev <[email protected]> wrote: >>>> Hello, >>>> >>>> I'm trying to start using new class based views from the trunk. >>>> >>>> I need to rewrite a view which is decorated >>>> django.contrib.auth.decorators.login_required. >>>> >>>> How should I go with that? >>> There are couple of options. >>> >>> 1) decorate the final view (for use in urls.py): >>> >>> decorated_view = login_required(MyView.as_view) >>> >>> In this option, you lose the ability to subclass the decorated view. >>> >>> 2) decorate the dispatch method. You need to turn login_required into >>> a method decorator first (Django should probably provide a tool for >>> this). Here[1] is an example how to do this. >>> >>> class MyDecoratedView(MyView): >>> >>> �...@on_method(login_required): >>> def dispatch(self, *args, **kwargs): >>> # do any extra stuff here >>> return super(MyDecoratedView, self).dispatch(*args, **kwargs) >>> >>> 3) Make a class decorator, that does the above, so you could do: >>> >>> @on_dispatch(login_required) >>> class MyDecoratedView(MyView): >>> pass >>> >>>> >>>> I was going to write something like LoginRequiredMixin, but I have no >>>> idea how to do this. I need to run my code before .dispatch(), but I >>>> also have to call the old dispatch, but since Mixin aren't inherited >>>> from View, I can't just override method and use super(). >>> >>> This is option #4. You can just do: >>> >>> class LoginRequiredMixin(object): >>> >>> def dispatch(self, *args, **kwargs): >>> bound_dispatch = super(LoginRequired, self).dispatch >>> return login_required(bound_dispatch)(*args, **kwargs) >>> >>> >>> [1]: http://www.toddreed.name/content/django-view-class/ >>> >>> -- >>> Łukasz Rekucki >>> >>> -- >>> You received this message because you are subscribed to the Google Groups >>> "Django users" group. >>> To post to this group, send email to [email protected]. >>> To unsubscribe from this group, send email to >>> [email protected]. >>> For more options, visit this group at >>> http://groups.google.com/group/django-users?hl=en. >>> >>> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Django users" group. >> To post to this group, send email to [email protected]. >> To unsubscribe from this group, send email to >> [email protected]. >> For more options, visit this group at >> http://groups.google.com/group/django-users?hl=en. >> >> > > > > -- > Łukasz Rekucki > > -- > You received this message because you are subscribed to the Google Groups > "Django users" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/django-users?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.

