Встроенные представления
Несколько встроенных представлений 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 Запрещено. Если представление приводит к исключению 403, Django по умолчанию вызовет представление django.views.defaults.permission_denied.
Это представление загружает и отображает шаблон 403.html в вашей корневой директории шаблонов, или если этот файл не существует, отображает текст «403 Запрещено», согласно RFC 9110 Раздел 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')
Когда в 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/5.2/ref/views/