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

Декоратор csrf_protect

Декоратор csrf_protect применяется к функциям представления и принудительно включает проверку CSRF-токена для POST-запросов. Этот декоратор полезен, когда CSRF-защита отключена глобально для всего проекта или для конкретного представления требуется явная проверка токена. Декоратор принимает функцию представления и возвращает обертку, которая выполняет проверку токена перед обработкой запроса.

Синтаксис

from django.views.decorators.csrf import csrf_protect @csrf_protect def my_view(request): # view logic pass

Пример

Давайте создадим представление для обработки формы, которое использует декоратор csrf_protect для защиты от CSRF-атак:

from django.shortcuts import render from django.http import HttpResponse from django.views.decorators.csrf import csrf_protect from django.template import RequestContext @csrf_protect def create_article(request): if request.method == 'POST': # Process the form data title = request.POST.get('title') content = request.POST.get('content') if title and content: return HttpResponse("Article created successfully!") else: return HttpResponse("Please fill all fields") return render(request, 'article_form.html')

В этом примере декоратор csrf_protect гарантирует, что все POST-запросы к представлению create_article будут содержать корректный CSRF-токен. Если токен отсутствует или недействителен, Django вернет ошибку 403 Forbidden.

Пример

Рассмотрим пример с использованием декоратора csrf_protect вместе с другими декораторами:

from django.shortcuts import render from django.http import HttpResponse from django.views.decorators.csrf import csrf_protect from django.views.decorators.http import require_POST from django.contrib.auth.decorators import login_required @login_required @require_POST @csrf_protect def update_profile(request): # Update user profile user = request.user email = request.POST.get('email') bio = request.POST.get('bio') if email: user.email = email user.save() if bio: # Update profile bio user.profile.bio = bio user.profile.save() return HttpResponse("Profile updated successfully")

В этом примере декоратор csrf_protect используется вместе с login_required и require_POST. Порядок декораторов важен: csrf_protect должен быть самым внутренним декоратором, чтобы проверка CSRF выполнялась после проверки метода запроса.

Пример

Рассмотрим использование декоратора csrf_protect с представлением, использующим классы:

from django.views import View from django.shortcuts import render from django.http import JsonResponse from django.utils.decorators import method_decorator from django.views.decorators.csrf import csrf_protect @method_decorator(csrf_protect, name='dispatch') class ArticleCreateView(View): def get(self, request): return render(request, 'article_create.html') def post(self, request): # Process the article creation data = { 'title': request.POST.get('title'), 'content': request.POST.get('content'), 'author': request.user.username } # Save article logic return JsonResponse({ 'status': 'success', 'message': 'Article created', 'data': data })

Для классовых представлений декоратор csrf_protect применяется с помощью method_decorator к методу dispatch, чтобы защитить все HTTP-методы.

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

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