30 lines
1.3 KiB
Python
30 lines
1.3 KiB
Python
from functools import wraps
|
|
from django.utils.translation import ugettext as _
|
|
from django.contrib.admin.forms import AdminAuthenticationForm
|
|
from django.contrib.auth.views import login
|
|
from django.contrib.auth import REDIRECT_FIELD_NAME
|
|
|
|
def staff_member_required(view_func):
|
|
"""
|
|
Decorator for views that checks that the user is logged in and is a staff
|
|
member, displaying the login page if necessary.
|
|
"""
|
|
@wraps(view_func)
|
|
def _checklogin(request, *args, **kwargs):
|
|
if request.user.is_active and request.user.is_staff:
|
|
# The user is valid. Continue to the admin page.
|
|
return view_func(request, *args, **kwargs)
|
|
|
|
assert hasattr(request, 'session'), "The Django admin requires session middleware to be installed. Edit your MIDDLEWARE_CLASSES setting to insert 'django.contrib.sessions.middleware.SessionMiddleware'."
|
|
defaults = {
|
|
'template_name': 'admin/login.html',
|
|
'authentication_form': AdminAuthenticationForm,
|
|
'extra_context': {
|
|
'title': _('Log in'),
|
|
'app_path': request.get_full_path(),
|
|
REDIRECT_FIELD_NAME: request.get_full_path(),
|
|
},
|
|
}
|
|
return login(request, **defaults)
|
|
return _checklogin
|