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

Исключение SuspiciousMultipartForm

Исключение SuspiciousMultipartForm является подклассом SuspiciousOperation и выбрасывается, когда Django обнаруживает подозрительное содержимое в multipart/form-data запросах. Это может произойти при попытке отправки слишком больших файлов, превышении лимитов полей формы или при обнаружении некорректной структуры multipart данных. Исключение помогает защитить приложение от потенциальных атак, связанных с переполнением памяти или DoS-атак через форму.

Синтаксис

from django.core.exceptions import SuspiciousOperation from django.http import SuspiciousMultipartForm # Обработка исключения try: # Код обработки формы pass except SuspiciousMultipartForm as e: # Обработка ошибки pass

Пример

Рассмотрим пример, когда исключение может возникнуть при загрузке файла, превышающего лимиты размера:

from django.http import SuspiciousMultipartForm from django.shortcuts import render from django.conf import settings def upload_file(request): if request.method == 'POST': try: # Попытка обработать загруженный файл file = request.FILES['file'] # Дополнительная логика обработки файла return render(request, 'success.html') except SuspiciousMultipartForm as e: # Логирование ошибки print(f"Suspicious form data: {e}") return render(request, 'error.html', { 'error': 'File too large or invalid format' }) return render(request, 'upload.html')

Пример

Пример обработки исключения при превышении лимита полей в форме:

from django.http import SuspiciousMultipartForm from django.core.exceptions import SuspiciousOperation import logging logger = logging.getLogger(__name__) def process_form(request): if request.method == 'POST': try: # Обработка данных формы data = request.POST files = request.FILES # Проверка количества полей if len(data) > 100: raise SuspiciousMultipartForm("Too many fields in form") # Логика обработки print("Form processed successfully") except SuspiciousMultipartForm as e: logger.warning(f"Suspicious form detected: {e}") return None return True

Пример

Использование исключения в пользовательском middleware для глобальной обработки:

from django.http import SuspiciousMultipartForm from django.http import JsonResponse from django.utils.deprecation import MiddlewareMixin class SuspiciousFormMiddleware(MiddlewareMixin): def process_exception(self, request, exception): if isinstance(exception, SuspiciousMultipartForm): # Логирование подозрительного запроса print(f"Suspicious form from {request.META.get('REMOTE_ADDR')}") # Возврат JSON ответа с ошибкой return JsonResponse({ 'error': 'Invalid form data detected', 'status': 400 }, status=400) return None

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

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