Skip to content

Instantly share code, notes, and snippets.

@gavinwahl
Created June 2, 2013 18:18
Show Gist options
  • Save gavinwahl/5694349 to your computer and use it in GitHub Desktop.
Save gavinwahl/5694349 to your computer and use it in GitHub Desktop.
DecoratorMixin is a mixin factory that converts any view decorator into a class-based view mixin.
def DecoratorMixin(decorator):
"""
Converts a decorator written for a function view into a mixin for a
class-based view.
::
LoginRequiredMixin = DecoratorMixin(login_required)
class MyView(LoginRequiredMixin):
pass
class SomeView(DecoratorMixin(some_decorator),
DecoratorMixin(something_else)):
pass
"""
class Mixin(object):
__doc__ = decorator.__doc__
@classmethod
def as_view(cls, *args, **kwargs):
view = super(Mixin, cls).as_view(*args, **kwargs)
return decorator(view)
Mixin.__name__ = str('DecoratorMixin(%s)' % decorator.__name__)
return Mixin
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment