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

Декоратор require_POST

Декоратор require_POST применяется к функциям представления и проверяет, что входящий запрос выполнен методом POST. Если запрос выполнен методом GET, PUT, DELETE или любым другим, то представление не вызывается, а возвращается ответ с кодом 405 Method Not Allowed. Декоратор находится в модуле django.views.decorators.http. Этот декоратор часто используется для защиты представлений, которые обрабатывают передачу форм, загрузку файлов или выполняют изменение данных в базе данных.

Синтаксис

from django.views.decorators.http import require_POST @require_POST def my_view(request): # Обработка POST-запроса pass

Пример . С обработкой формы

Рассмотрим пример представления для создания статьи, которое принимает только POST-запросы:

from django.shortcuts import render, redirect from django.views.decorators.http import require_POST from myapp.models import Article @require_POST def create_article(request): title = request.POST.get('title') content = request.POST.get('content') Article.objects.create(title=title, content=content) return redirect('article_list')

Если пользователь попытается открыть URL этой функции через GET-запрос (например, просто перейдет по ссылке), то получит ошибку 405:

"Method Not Allowed (GET): /articles/create/"

Пример . С обработкой загрузки файлов

Декоратор require_POST также полезен для представлений, которые обрабатывают загрузку файлов через форму:

from django.views.decorators.http import require_POST from django.http import JsonResponse from myapp.models import Document @require_POST def upload_file(request): uploaded_file = request.FILES.get('file') if uploaded_file: document = Document.objects.create( name=uploaded_file.name, file=uploaded_file ) return JsonResponse({ 'status': 'success', 'id': document.id }) return JsonResponse({'status': 'error'}, status=400)

Пример . С валидацией данных

В этом примере представление обрабатывает POST-запрос с данными для обновления профиля пользователя:

from django.views.decorators.http import require_POST from django.shortcuts import get_object_or_404 from django.http import HttpResponse from myapp.models import UserProfile @require_POST def update_profile(request, user_id): profile = get_object_or_404(UserProfile, user_id=user_id) email = request.POST.get('email') phone = request.POST.get('phone') if email: profile.email = email if phone: profile.phone = phone profile.save() return HttpResponse('Profile updated successfully')

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

  • декоратор require_GET,
    который ограничивает доступ только для GET-запросов
  • декоратор require_http_methods,
    который позволяет указать список разрешенных HTTP методов
  • декоратор require_safe,
    который ограничивает доступ для безопасных методов (GET и HEAD)
  • декоратор csrf_exempt,
    который отключает проверку CSRF-токена для представления
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить