Исключение TooManyFilesSent
Исключение TooManyFilesSent из модуля django.core.exceptions
возникает при обработке запроса, содержащего файлы, когда общее
количество переданных файлов превышает значение, установленное
в параметре DATA_UPLOAD_MAX_NUMBER_FILES. Это исключение
является подклассом SuspiciousOperation и служит для защиты
сервера от чрезмерного количества файлов в одном запросе.
По умолчанию лимит установлен на значение 100 файлов.
Синтаксис
class TooManyFilesSent(SuspiciousOperation):
pass
Пример
Рассмотрим ситуацию, когда клиент отправляет запрос с большим количеством файлов, превышающим лимит:
from django.core.exceptions import TooManyFilesSent
from django.http import HttpRequest
# Создаём тестовый запрос с множеством файлов
request = HttpRequest()
request.FILES = {
f'file_{i}': None for i in range(150)
}
try:
# Django автоматически проверяет количество файлов
# при обработке запроса
if len(request.FILES) > 100:
raise TooManyFilesSent(
'Too many files sent in request'
)
except TooManyFilesSent as e:
print(str(e))
Результат выполнения кода:
"Too many files sent in request"
Пример
В реальном приложении это исключение обрабатывается автоматически Django. Можно переопределить лимит в настройках проекта:
# settings.py
# Устанавливаем максимальное количество файлов в запросе - 50
DATA_UPLOAD_MAX_NUMBER_FILES = 50
# views.py
from django.views.decorators.csrf import csrf_exempt
from django.http import JsonResponse
from django.core.exceptions import TooManyFilesSent
@csrf_exempt
def upload_multiple_files(request):
try:
# Если файлов больше 50, Django выбросит исключение
files = request.FILES
res = {"status": "ok", "files_count": len(files)}
return JsonResponse(res)
except TooManyFilesSent:
res = {"status": "error", "message": "Too many files"}
return JsonResponse(res, status=400)
Пример
Пример обработки исключения в middleware для централизованной обработки ошибок:
from django.core.exceptions import TooManyFilesSent
from django.http import HttpResponse
class FilesLimitMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
try:
response = self.get_response(request)
return response
except TooManyFilesSent:
return HttpResponse(
"Too many files uploaded",
status=400
)
Результат выполнения кода при превышении лимита:
"Too many files uploaded"
Смотрите также
-
исключение
TooManyFieldsSent,
которое возникает при превышении количества полей в запросе -
исключение
SuspiciousMultipartForm,
которое возникает при подозрительном multipart запросе -
исключение
RequestDataTooBig,
которое возникает при превышении размера данных запроса -
исключение
SuspiciousFileOperation,
которое возникает при подозрительной операции с файлами