内置视图¶
Django的几个内置视图记录在 写视图 以及文档的其他地方。
在开发中提供文件¶
-
static.
serve
(request, path, document_root, show_indexes=False)¶
除了项目的静态资源之外,可能还有其他文件,为了方便起见,您希望Django在本地开发中为您服务。 serve()
视图可用于服务您提供的任何目录。 (此视图是为生产使用而固化的 不,应仅用作开发辅助工具;应使用真正的前端Web服务器在生产中提供这些文件)。
最可能的示例是用户在 MEDIA_ROOT
中上传的内容。 django.contrib.staticfiles
用于静态资源,并且没有内置处理用户上传的文件,但是您可以让Django通过在URLconf中附加类似的东西来为您的 MEDIA_ROOT
提供服务:
from django.conf import settings
from django.views.static import serve
# ... the rest of your URLconf goes here ...
if settings.DEBUG:
urlpatterns += [
url(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次观看的三件事:
如果Django在检查了URLconf中的每个正则表达式之后没有找到匹配项,也会调用404视图。
404视图被传递给
RequestContext
,并且将访问由模板上下文处理器(例如MEDIA_URL
)提供的变量。如果
DEBUG
设置为True
(在您的设置模块中),则将不会使用您的404视图,并且将显示您的URLconf,并显示一些调试信息。
page_not_found()
的签名改变了。该函数现在接受第二个参数,触发错误的异常。异常的有用表示也在模板上下文中传递。
通过不存在的 template_name
将提高 TemplateDoesNotExist
。
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视图,并且将显示回溯,并显示一些调试信息。
通过不存在的 template_name
将提高 TemplateDoesNotExist
。
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
,或者如果此文件不存在,则根据 RFC 7231#section-6.5.3 (HTTP 1.1规范)提供文本“403 Forbidden”。模板上下文包含 exception
,它是触发视图的异常的unicode表示。
django.views.defaults.permission_denied
由 PermissionDenied
异常触发。要在视图中拒绝访问,您可以使用这样的代码:
from django.core.exceptions import PermissionDenied
def edit(request, pk):
if not request.user.is_staff:
raise PermissionDenied
# ...
permission_denied()
的签名在Django 1.9中改变。该函数现在接受第二个参数,触发错误的异常。异常的unicode表示也在模板上下文中传递。
通过不存在的 template_name
将提高 TemplateDoesNotExist
。
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
时使用。
bad_request()
的签名在Django 1.9中改变。该函数现在接受第二个参数,触发错误的异常。
通过不存在的 template_name
将提高 TemplateDoesNotExist
。