Add a middleware to support redirects using raise
authorMagnus Hagander <magnus@hagander.net>
Thu, 29 Mar 2018 14:02:59 +0000 (16:02 +0200)
committerMagnus Hagander <magnus@hagander.net>
Thu, 29 Mar 2018 14:02:59 +0000 (16:02 +0200)
This is maybe not pretty, but very convenient..

postgresqleu/settings.py
postgresqleu/util/middleware.py

index e3efa23203ef71995e1d19e5b2231be9472e38c7..e6213f49d6bd2019c33ce3a6d8d4342471bb7517 100644 (file)
@@ -62,6 +62,7 @@ MIDDLEWARE_CLASSES = [
        'django.middleware.csrf.CsrfViewMiddleware',
     'django.contrib.auth.middleware.AuthenticationMiddleware',
     'postgresqleu.util.middleware.FilterPersistMiddleware',
+    'postgresqleu.util.middleware.RedirectMiddleware',
 ]
 
 CSRF_FAILURE_VIEW='postgresqleu.views.csrf_failure'
index 903bd8342293beef9fb7b7c760ff9a07fb3a3189..fcda5f7c28476407e8f924b054b7a9bac374514c 100644 (file)
@@ -1,4 +1,5 @@
 from django import http
+from django import shortcuts
 from django.conf import settings
 
 import base64
@@ -69,3 +70,13 @@ class GlobalLoginMiddleware(object):
                response.status_code = 401
                response['WWW-Authenticate'] = 'Basic realm={0}'.format(settings.SITEBASE)
                return response
+
+# Ability to redirect using raise()
+class RedirectException(Exception):
+       def __init__(self, url):
+               self.url = url
+
+class RedirectMiddleware(object):
+       def process_exception(self, request, exception):
+               if isinstance(exception, RedirectException):
+                       return shortcuts.redirect(exception.url)