РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
518 of 818 menu

Исключение RequestDataTooBig

Исключение RequestDataTooBig наследуется от SuspiciousOperation и возникает, когда размер данных, переданных в запросе (например, содержимое POST-запроса или загруженные файлы), превышает установленный в настройках Django лимит. Это исключение служит для защиты сервера от потенциальных атак, связанных с переполнением памяти или DoS-атак через отправку чрезмерно больших объемов данных. По умолчанию Django устанавливает ограничение на размер запроса в 2.5 МБ для обычных данных и 2.5 МБ для загружаемых файлов.

Синтаксис

from django.core.exceptions import RequestDataTooBig raise RequestDataTooBig("Размер данных превышает допустимый лимит")

Настройка лимитов в Django

Лимиты на размер запроса настраиваются через параметры в файле настроек settings.py:

# settings.py # Максимальный размер данных запроса (в байтах) DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440 # 2.5 MB # Максимальный размер загружаемого файла (в байтах) FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440 # 2.5 MB # Максимальное количество полей в запросе DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000

Пример

Создадим модель для загрузки изображений и обработаем возможное исключение RequestDataTooBig:

from django.db import models class ImageUpload(models.Model): title = models.CharField(max_length=100) image = models.FileField(upload_to='images/') uploaded_at = models.DateTimeField(auto_now_add=True) def __str__(self): return self.title

Пример

Обработка исключения во view-функции при загрузке большого файла:

from django.core.exceptions import RequestDataTooBig from django.http import JsonResponse from django.views.decorators.csrf import csrf_exempt from .models import ImageUpload @csrf_exempt def upload_image(request): if request.method == 'POST': try: file = request.FILES['image'] title = request.POST.get('title', 'Untitled') # Проверка размера файла вручную if file.size > 5 * 1024 * 1024: # 5 MB return JsonResponse({ 'error': 'File too large', 'message': 'Максимальный размер файла - 5 МБ' }, status=400) upload = ImageUpload.objects.create( title=title, image=file ) return JsonResponse({ 'success': True, 'id': upload.id, 'title': upload.title }) except RequestDataTooBig as e: # Обработка превышения лимита return JsonResponse({ 'error': 'Request too large', 'message': str(e) }, status=413) return JsonResponse({'error': 'Method not allowed'}, status=405)

Пример

Глобальная обработка исключения через middleware для централизованного управления ошибками:

from django.core.exceptions import RequestDataTooBig from django.http import JsonResponse class RequestSizeLimitMiddleware: def __init__(self, get_response): self.get_response = get_response def __call__(self, request): response = self.get_response(request) return response def process_exception(self, request, exception): if isinstance(exception, RequestDataTooBig): return JsonResponse({ 'error': 'Request Data Too Big', 'message': 'Превышен лимит размера запроса' }, status=413) return None

Пример

Увеличение лимитов для конкретного вида запросов с использованием декоратора:

from django.core.exceptions import RequestDataTooBig from django.http import HttpResponse from django.views.decorators.csrf import csrf_exempt import json @csrf_exempt def large_data_view(request): if request.method == 'POST': try: # Проверяем размер тела запроса if len(request.body) > 10 * 1024 * 1024: # 10 MB raise RequestDataTooBig( 'Размер запроса превышает 10 МБ' ) data = json.loads(request.body) # Обработка данных return HttpResponse( f'Обработано {len(data)} записей', status=200 ) except RequestDataTooBig as e: return HttpResponse( f'Ошибка: {str(e)}', status=413 ) except json.JSONDecodeError: return HttpResponse( 'Неверный JSON формат', status=400 ) return HttpResponse('Метод не поддерживается', status=405)

Смотрите также

  • исключение SuspiciousOperation,
    базовое исключение для подозрительных операций
  • исключение TooManyFieldsSent,
    возникает при превышении лимита полей в запросе
  • исключение TooManyFilesSent,
    возникает при превышении лимита файлов в запросе
  • исключение RequestAborted,
    возникает при прерывании запроса клиентом
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить