Introduce a middleware that allows for HttpResponses to be thrown from inner utility functions, to avoid boilerplate in views

This commit is contained in:
Danielle McLean 2018-07-03 09:41:00 +10:00
parent 1d4be082cf
commit 7d17a92793
Signed by untrusted user: 00dani
GPG key ID: 8EB789DDF3ABD240
4 changed files with 22 additions and 9 deletions

14
lemoncurry/middleware.py Normal file
View file

@ -0,0 +1,14 @@
from django.http import HttpRequest, HttpResponse
from django.utils.deprecation import MiddlewareMixin
class ResponseException(Exception):
def __init__(self, response: HttpResponse) -> None:
self.response = response
class ResponseExceptionMiddleware(MiddlewareMixin):
def process_exception(self, request: HttpRequest, exception: Exception) -> HttpResponse:
if isinstance(exception, ResponseException):
return exception.response
raise exception

View file

@ -118,6 +118,7 @@ MIDDLEWARE = [
'django.contrib.messages.middleware.MessageMiddleware',
'django.contrib.sites.middleware.CurrentSiteMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'lemoncurry.middleware.ResponseExceptionMiddleware',
]
ROOT_URLCONF = 'lemoncurry.urls'