Как добавить декоратор в класс?
Итак, я могу добавить декоратор к нескольким функциям в своем коде, но я не знаю, как добавить его к классу.
Вот мои декораторы:
def unauthenticated_user(view_func):
def wrapper_func(request, *args, **kwargs):
if request.user.is_authenticated:
return redirect('index')
else:
return view_func(request, *args, **kwargs)
return wrapper_func
def allowed_users(allowed_roles=[]):
def decorator(view_func):
def wrapper_func(request, *args, **kwargs):
group = None
if request.user.groups.exists():
group = request.user.groups.all()[0].name
if group in allowed_roles:
return view_func(request, *args, **kwargs)
else:
return HttpResponse('You are not authorised to view this page')
return wrapper_func
return decorator
А вот класс:
class PasswordsChangeView(PasswordChangeView):
form_class = PasswordChangedForm
success_url = reverse_lazy('password-success')
Хотя можно работать с декораторами, которые работают с функциями с @method_decorator(…) [Django-doc], обычно пишут mixins.
Например, для вашего декоратора unauthenticated_user вы можете написать миксин:
class UnauthenticatedUserMixin:
def dispatch(self, request, *args, **kwargs):
if request.user.is_authenticated:
return redirect('index')
else:
return super().dispatch(request, *args, **kwargs)
и затем смешайте это с вашим представлением:
class MyView(UnauthenticatedUserMixin, TemplateView):
# …