from django.http import HttpResponseRedirect from functools import wraps def permission(permission_tester): @wraps(permission_tester) def view_decorator(view_function): @wraps(view_decorator) def decorated_view(request, *args, **kwargs): if permission_tester(request, *args, **kwargs): view_result = view_function(request, *args, **kwargs) else: try: request.user.message_set.create(message="Sorry, you don't have the necessary permissions to view that page.") except: pass view_result = HttpResponseRedirect("/") return view_result return decorated_view return view_decorator