Skip to content

Instantly share code, notes, and snippets.

@bryanhelmig
Last active August 29, 2015 14:02
Show Gist options
  • Save bryanhelmig/9d09d1bd9a63504371d2 to your computer and use it in GitHub Desktop.
Save bryanhelmig/9d09d1bd9a63504371d2 to your computer and use it in GitHub Desktop.
Skip sessions and user authentication middleware in Django (1.4).
from django.conf import settings
from django.core.handlers.base import BaseHandler
from django.core import urlresolvers
SILENT_EARLY_RETURN_FAIL = getattr(settings, 'SILENT_EARLY_RETURN_FAIL', True)
def return_early_decorator(view):
"""
In a view, return early, like so:
@return_early_decorator
def view(request):
# don't use request.user or request.session!
return HttpResponse('A normal view!')
"""
view.return_hella_early = True
return view
class MaybeReturnEarlyView(object):
def process_request(self, request):
"Reuses code from BaseHandler's get_response."
urlconf = settings.ROOT_URLCONF
urlresolvers.set_urlconf(urlconf)
resolver = urlresolvers.RegexURLResolver(r'^/', urlconf)
if hasattr(request, 'urlconf'):
# Reset url resolver with a custom urlconf.
urlconf = request.urlconf
urlresolvers.set_urlconf(urlconf)
resolver = urlresolvers.RegexURLResolver(r'^/', urlconf)
callback, callback_args, callback_kwargs = resolver.resolve(
request.path_info)
try:
if getattr(callback, 'return_hella_early', False):
handler = BaseHandler()
handler._view_middleware = []
handler._template_response_middleware = []
handler._request_middleware = []
handler._response_middleware = []
handler._exception_middleware = []
response = handler.get_response(request)
response['X-Return-Early'] = 'true'
return response
except:
if not SILENT_EARLY_RETURN_FAIL:
raise
pass # this lets the normal path go...
MIDDLEWARE_CLASSES = (
# etc...
'django.middleware.common.CommonMiddleware',
# place me *before* SessionMiddleware/AuthenticationMiddleware
'path.to.middleware.MaybeReturnEarlyView',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
# etc...
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment