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

Исключение Http404

Исключение Http404 применяется для генерации HTTP-ответа с кодом состояния 404 (Не найдено). Это исключение следует вызывать в тех случаях, когда запрашиваемый объект не найден в базе данных или когда условие для отображения страницы не выполнено. Django автоматически обрабатывает это исключение и отображает стандартную страницу 404.

Синтаксис

from django.http import Http404 raise Http404("Сообщение об ошибке")

Конструктор исключения принимает необязательный параметр - строку с сообщением об ошибке, которое будет отображено на странице 404.

Пример . С использованием get_object_or_404

Рассмотрим типичный пример использования исключения во вьюхе для получения статьи по ID:

from django.http import Http404 from django.shortcuts import render from myapp.models import Article def article_detail(request, article_id): try: article = Article.objects.get(id=article_id) except Article.DoesNotExist: raise Http404("Article does not exist") return render(request, 'article_detail.html', {'article': article})

Если статья с указанным ID не найдена, будет вызвано исключение Http404.

Пример . С проверкой условий

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

from django.http import Http404 from django.shortcuts import render from myapp.models import Article def article_view(request, article_id): try: article = Article.objects.get(id=article_id) except Article.DoesNotExist: raise Http404("Article not found") if not article.is_published: raise Http404("Article is not available") return render(request, 'article_view.html', {'article': article})

Результат выполнения при обращении к неопубликованной статье:

"Page not found (404)" "Request Method: GET" "Request URL: http://example.com/article/5/" "Article is not available"

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

Возврат ответа 404 при работе с JSON-API:

from django.http import JsonResponse, Http404 from myapp.models import User def user_api(request, user_id): try: user = User.objects.get(id=user_id) except User.DoesNotExist: raise Http404("User not found") return JsonResponse({ 'id': user.id, 'username': user.username, 'email': user.email })

При запросе несуществующего пользователя будет возвращен ответ с кодом 404:

{ "detail": "User not found" }

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

  • исключение DoesNotExist,
    которое выбрасывается при отсутствии объекта в базе данных
  • исключение ObjectDoesNotExist,
    базовое исключение для всех случаев отсутствия объектов
  • исключение MultipleObjectsReturned,
    которое возникает когда запрос возвращает более одного объекта
  • исключение PermissionDenied,
    которое используется для генерации ответа с кодом 403
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить