When a RequestDataTooBig exception is thrown, users are largely in the dark about what happened and how it can be fixed. This commit resolves this by inserting middleware to redirect the request to a custom 413 error page. This exception is thrown when DATA_UPLOAD_MAX_MEMORY_SIZE is exceeded. The default value is 2.5MB. Fixes #2340 Fixes #2633
30 lines
846 B
Python
30 lines
846 B
Python
"""Middleware to display a custom 413 error page"""
|
|
|
|
from django.http import HttpResponse
|
|
from django.shortcuts import render
|
|
from django.core.exceptions import RequestDataTooBig
|
|
|
|
|
|
class FileTooBig:
|
|
"""Middleware to display a custom page when a
|
|
RequestDataTooBig exception is thrown"""
|
|
|
|
def __init__(self, get_response):
|
|
"""boilerplate __init__ from Django docs"""
|
|
|
|
self.get_response = get_response
|
|
|
|
def __call__(self, request):
|
|
"""If RequestDataTooBig is thrown, render the 413 error page"""
|
|
|
|
try:
|
|
body = request.body # pylint: disable=unused-variable
|
|
|
|
except RequestDataTooBig:
|
|
|
|
rendered = render(request, "413.html")
|
|
response = HttpResponse(rendered)
|
|
return response
|
|
|
|
response = self.get_response(request)
|
|
return response
|