public
Last active

Django Class-Based View Mixins: Part 1

  • Download Gist
login_required.py
Python
1 2 3 4 5 6 7 8
class LoginRequiredMixin(object):
"""
View mixin which requires that the user is authenticated.
"""
@method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):
return super(LoginRequiredMixin, self).dispatch(
self, request, *args, **kwargs)
permissions_required.py
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
class PermissionsRequiredMixin(object):
"""
View mixin which verifies that the logged in user has the specified
permissions.
 
Settings:
 
`required_permissions` - list/tuple of required permissions
 
Example Usage:
 
class SomeView(PermissionsRequiredMixin, ListView):
...
required_permissions = (
'app1.permission_a',
'app2.permission_b',
)
...
"""
required_permissions = ()
 
@method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):
if not request.user.has_perms(self.required_permissions):
messages.error(
request,
'You do not have the permission required to perform the '
'requested operation.')
return redirect(settings.LOGIN_URL)
return super(PermissionsRequiredMixin, self).dispatch(
request, *args, **kwargs)
staff_required.py
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
class StaffRequiredMixin(object):
"""
View mixin which requires that the authenticated user is a staff member
(i.e. `is_staff` is True).
"""
 
@method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):
if not request.user.is_staff:
messages.error(
request,
'You do not have the permission required to perform the '
'requested operation.')
return redirect(settings.LOGIN_URL)
return super(StaffRequiredMixin, self).dispatch(request,
*args, **kwargs)
superuser_required.py
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
class SuperUserRequiredMixin(object):
"""
View mixin which requires that the authenticated user is a super user
(i.e. `is_superuser` is True).
"""
 
@method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):
if not request.user.is_superuser:
messages.error(
request,
'You do not have the permission required to perform the '
'requested operation.')
return redirect(settings.LOGIN_URL)
return super(SuperUserRequiredMixin, self).dispatch(request,
*args, **kwargs)

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.