import django.contrib.auth.mixins from django.core.exceptions import PermissionDenied from django.contrib.auth.views import redirect_to_login from django.shortcuts import render class LoginRequiredMixin(django.contrib.auth.mixins.LoginRequiredMixin): def handle_no_permission(self): if self.raise_exception or self.request.user.is_authenticated: raise PermissionDenied(self.get_permission_denied_message()) # Redirect to uri(with scheme and host) return redirect_to_login( self.request.get_raw_uri(), self.get_login_url(), self.get_redirect_field_name()) def dispatch(self, request, *args, **kwargs): if not request.user.is_authenticated: return self.handle_no_permission() return super().dispatch(request, *args, **kwargs) class AdminReuqiredMinxin: def dispatch(self, request, *args, **kwargs): if not request.user.is_staff: return render( request, template_name='university/permission_denied.html', status=403) return super().dispatch(request, *args, **kwargs)