Как добавить декоратор в класс?

Итак, я могу добавить декоратор к нескольким функциям в своем коде, но я не знаю, как добавить его к классу.

Вот мои декораторы:

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):
    # …
Вернуться на верх