MaintenanceMiddleware für Django
Veröffentlich am 24.11.2008, 22:07
Wer hat diesen Fall noch nicht gehabt. Alle Inhalte einer Webseite sollen vom Netz genommen werden, die Redakteure und Administrationen der Seite sollen jedoch weiterhin Zugriff haben.
Das folgende Snippet hilft, eine Webseite mittels einer settings-Variable zu deaktivieren. Die Django-Verwaltung des Systems bleibt jedoch weiterhin erreichbar.
from django.shortcuts import render_to_response
from django.conf import settings
class MaintenanceMiddleware(object):
def process_view(self, request, view_func, view_args, view_kwargs):
if getattr(settings, 'PAGE_IN_MAINTENANCE', False):
view_name = '%s.%s' % (view_func.__module__, view_func.__name__)
if view_name != 'django.contrib.admin.sites.root' \
and view_name != 'django.views.static.serve' \
and (not request.user.is_authenticated() or not request.user.is_staff):
return render_to_response(getattr(settings, 'PAGE_MAINTENANCE_TEMPLATE', 'base_page_maintenance.html'))
Zur Verwendung:
- die Middleware Klasse irgendwo ablegen
- Middleware in die MIDDLEWARE_CLASSES (settings.py) eintragen
Konfiguration:
- PAGE_IN_MAINTENANCE auf True setzen, um die Webseite zu sperren
- PAGE_MAINTENANCE_TEMPLATE auf den Namen des Templates setzen, welches für die Maintenance-Seite verwendet werden soll
Tags: django, middleware