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

Класс HttpResponseForbidden

Класс HttpResponseForbidden наследуется от HttpResponse и предназначен для формирования HTTP-ответа с кодом состояния 403. Этот код указывает, что сервер понял запрос, но отказывается его выполнять из-за недостатка прав у пользователя. В отличие от ошибки 401, которая требует аутентификации, ошибка 403 означает, что аутентификация не поможет - доступ запрещен на уровне прав доступа.

Класс принимает те же параметры, что и базовый HttpResponse: содержимое ответа (строку), параметры заголовков и другие аргументы. При этом код состояния автоматически устанавливается в 403, а причинно-следственная фраза устанавливается в "Forbidden".

Синтаксис

HttpResponseForbidden(content='', *args, **kwargs)

Параметры конструктора:

  • content - строковое содержимое ответа (может быть пустым)
  • *args и **kwargs - дополнительные аргументы, передаваемые в базовый класс HttpResponse

Пример . Использование в представлении

В этом примере проверяется наличие у пользователя роли "admin" и возвращается ответ с кодом 403 при отсутствии прав:

from django.http import HttpResponseForbidden from django.shortcuts import render def admin_panel(request): if not request.user.is_authenticated: return HttpResponseForbidden("Authentication required") if not request.user.is_superuser: return HttpResponseForbidden("You do not have admin rights") return render(request, 'admin_panel.html')

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

"Authentication required"

Пример . С обработкой ошибок в классе-представлении

Рассмотрим использование HttpResponseForbidden в классе-представлении для контроля доступа к объектам:

from django.http import HttpResponseForbidden from django.views import View from myapp.models import Document class DocumentEditView(View): def get(self, request, doc_id): try: doc = Document.objects.get(id=doc_id) except Document.DoesNotExist: return HttpResponseForbidden("Document not found") if doc.owner != request.user: return HttpResponseForbidden("You are not the owner of this document") return render(request, 'edit_document.html', {'doc': doc})

Пример . С использованием декоратора и JSON-ответа

Можно возвращать HttpResponseForbidden с JSON-данными для API-эндпоинтов:

import json from django.http import HttpResponseForbidden from django.views.decorators.http import require_http_methods @require_http_methods(['POST']) def api_delete_user(request, user_id): if not request.user.is_staff: data = json.dumps({ 'error': 'Forbidden', 'message': 'Staff privileges required' }) return HttpResponseForbidden(data, content_type='application/json') # Deletion logic here return JsonResponse({'success': True})

Пример . Настройка кастомной страницы 403

Можно передать в ответ HTML-содержимое для отображения кастомной страницы ошибки:

from django.http import HttpResponseForbidden from django.template import loader def restricted_section(request): if not request.user.is_authenticated: template = loader.get_template('errors/403.html') context = {'error_message': 'Please log in first'} return HttpResponseForbidden(template.render(context, request)) return render(request, 'restricted.html')

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

  • класс HttpResponseNotFound,
    который возвращает ответ с кодом ошибки 404
  • класс HttpResponseBadRequest,
    который возвращает ответ с кодом ошибки 400
  • класс HttpResponseNotAllowed,
    который возвращает ответ с кодом ошибки 405
  • класс HttpResponseServerError,
    который возвращает ответ с кодом ошибки 500
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить