Last active
August 29, 2015 14:02
-
-
Save bryanhelmig/9d09d1bd9a63504371d2 to your computer and use it in GitHub Desktop.
Skip sessions and user authentication middleware in Django (1.4).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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... |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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