Вопрос знатокам python.
Исходная задача - необходимо, чтобы один из методов класса оборачивался в декораторы. Это можно сделать через переопределение этого метода и оборачиванием его через method_decorator.
class MyView(View):
@method_decorator(login_required):
def dispatch(self, *args, **kwargs):
return super(MyView, self).dispatch(*args, **kwargs)
Я не хочу переписывать каждый раз этот метод. Мне кажется более логичным такое решение
@viewdecorator(login_required)
class MyView(View):
pass
Вот вопрос - как написать
viewdecorator?
Сейчас я написал следующее:
def viewdecorator(decorator):
def wrap(cls):
dispatch = getattr(cls, 'dispatch', None)
if dispatch:
setattr(cls, 'dispatch', method_decorator(decorator))
return cls
return wrap
При этом почему-то не переносятся classmethod-ы и classonlymethod-ы. Конкретно в моем случае не идет as_view().
Как сделать так, чтоб это перенеслось?