Встроенные представления
Несколько встроенных представлений 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)
-
defaults.permission_denied(request, exception, template_name='403.html')
Как и для представлений 404 и 500, в Django есть представление для обработки ошибок 403 Forbidden. Если представление вызывает исключение 403, Django по умолчанию вызывает представление django.views.defaults.permission_denied.
Это представление загружает и отображает шаблон 403.html из корневого каталога шаблонов или, если такого файла нет, выводит текст «403 Forbidden» в соответствии с разделом 15.5.4 RFC 9110 (спецификацией 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')
Когда в Django возникает исключение SuspiciousOperation, его может обработать компонент 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/6.0/ref/views/