Spec-Zone.ru › Django 4.2

Встроенные представления

Несколько встроенных представлений Django документированы в Написании представлений, а также в других разделах документации.

Обслуживание файлов в режиме разработки

static.serve(request, path, document_root, show_indexes=False)

Возможно, помимо статических ресурсов вашего проекта, вам для удобства потребуется, чтобы Django обслуживал их в режиме локальной разработки. Представление serve() может быть использовано для обслуживания любого каталога, который вы ему передадите. (Это представление не предназначено для использования в производстве и должно использоваться только как средство разработки; для обслуживания этих файлов в производстве следует использовать настоящий веб-сервер переднего плана).

Наиболее вероятный пример — содержимое, загруженное пользователем, в MEDIA_ROOT. django.contrib.staticfiles предназначен для статических ресурсов и не имеет встроенной обработки загружаемых пользователем файлов, но вы можете настроить Django для обслуживания ваших MEDIA_ROOT, добавив что-то вроде этого в ваш файл URLconf:

from django.conf import settings
from django.urls import re_path
from django.views.static import serve

# ... the rest of your URLconf goes here ...

if settings.DEBUG:
    urlpatterns += [
        re_path(
            r"^media/(?P<path>.*)$",
            serve,
            {
                "document_root": settings.MEDIA_ROOT,
            },
        ),
    ]

Обратите внимание, что фрагмент кода предполагает, что у вашего MEDIA_URL значение 'media/'. Это вызовет представление serve(), передав путь из файла URLconf и (необходимый) параметр document_root.

Поскольку определение этой схемы URL может стать немного громоздким, Django поставляется с небольшой вспомогательной функцией для URL static(), которая принимает в качестве параметров префикс, такой как MEDIA_URL, и имя представления, например 'django.views.static.serve'. Любые другие параметры функции будут прозрачно переданы в представление.

Представления ошибок

Django по умолчанию предоставляет несколько представлений для обработки ошибок HTTP. Чтобы переопределить их своими пользовательскими представлениями, см. Настройка представлений ошибок.

Представление 404 (страница не найдена)

defaults.page_not_found(request, exception, template_name='404.html')

При использовании Http404 внутри представления, Django загружает специальное представление для обработки ошибок 404. По умолчанию это представление django.views.defaults.page_not_found(), которое либо выводит сообщение «Не найдено», либо загружает и отображает шаблон 404.html, если вы его создали в корневом каталоге шаблонов.

Представление 404 по умолчанию передаёт две переменные в шаблон: request_path, которая представляет URL, приведший к ошибке, и exception, которая является полезным представлением исключения, вызвавшего представление (например, содержащим сообщение, переданное конкретному экземпляру Http404).

Три замечания относительно представлений 404:

  • Представление 404 также вызывается, если Django не находит соответствия после проверки всех регулярных выражений в файле URLconf.
  • Представлению 404 передаётся RequestContext, и оно будет иметь доступ к переменным, предоставленным обработчиками контекста шаблонов (например, MEDIA_URL).
  • Если DEBUG установлено в значение True (в вашем модуле настроек), то ваше представление 404 никогда не будет использоваться, и вместо этого будет отображаться ваш файл URLconf с некоторой отладочной информацией.

Представление 500 (ошибка сервера)

defaults.server_error(request, template_name='500.html')

Аналогично, Django выполняет специальное поведение в случае ошибок во время выполнения в коде представления. Если представление приводит к возникновению исключения, Django по умолчанию вызовет представление django.views.defaults.server_error, которое либо выводит сообщение «Ошибка сервера», либо загружает и отображает шаблон 500.html, если вы его создали в корневом каталоге шаблонов.

Представление 500 по умолчанию не передаёт переменных в шаблон 500.html, и рендеринг происходит с пустым Context, чтобы уменьшить вероятность дополнительных ошибок.

Если DEBUG установлено в значение True (в вашем модуле настроек), то ваше представление 500 никогда не будет использоваться, и вместо этого будет отображена информация об отслеживании ошибок с некоторыми отладочными данными.

Представление 403 (HTTP Forbidden)

defaults.permission_denied(request, exception, template_name='403.html')

В том же духе, что и представления 404 и 500, Django имеет представление для обработки ошибок 403 Forbidden. Если представление приводит к возникновению исключения 403, Django по умолчанию вызовет представление django.views.defaults.permission_denied.

Это представление загружает и отображает шаблон 403.html в корневом каталоге шаблонов, или если этот файл не существует, вместо этого выводит текст «403 Запрещено», согласно RFC 9110#section-15.5.4 (Спецификация HTTP 1.1). Контекст шаблона содержит exception, которая представляет собой строковое представление исключения, вызвавшего представление.

django.views.defaults.permission_denied вызывается исключением PermissionDenied. Чтобы запретить доступ в представлении, вы можете использовать код такого типа:

from django.core.exceptions import PermissionDenied


def edit(request, pk):
    if not request.user.is_staff:
        raise PermissionDenied
    # ...

Представление 400 (некорректный запрос)

defaults.bad_request(request, exception, template_name='400.html')

При поднятии SuspiciousOperation в Django, он может обрабатываться компонентом Django (например, сброс данных сессии). Если он не обрабатывается явно, Django будет рассматривать текущий запрос как «некорректный запрос», а не ошибку сервера.

django.views.defaults.bad_request, в остальном очень похож на представление server_error, но возвращает код состояния 400, указывая, что условие ошибки является результатом действия клиента. По умолчанию, ничего, относящегося к исключению, которое вызвало представление, не передаётся в контекст шаблона, поскольку сообщение об исключении может содержать конфиденциальную информацию, например, пути к файлам.

bad_request представления используются только при DEBUG имеет значение False.

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/4.2/ref/views/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API