Django参考文档:内置视图
创始人
2026-04-30 16:24:10
0

内置视图

Django 内置的几个视图在 编写视图 以及文档的其他地方都有记载。

为开发中的文件提供服务

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

除了你的项目的静态资源外,可能还有一些其他的文件,为了方便,你想让 Django 在本地开发中为你提供服务。serve() 视图可以用来为你给它的任何目录提供服务。(这个视图并 没有 强到用于生产,只应该作为开发辅助工具,你应该在生产中使用真正的前端 Web 服务器来服务这些文件)。

最有可能的例子是用户在 MEDIA_ROOT 中上传的内容。django.contrib.staticfiles 是为静态资源设计的,并没有内置处理用户上传文件的功能,但是你可以通过在 URLconf 中添加这样的内容,让 Django 为你的 MEDIA_ROOT 服务:

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.*)$",
            serve,
            {
                "document_root": settings.MEDIA_ROOT,
            },
        ),
    ]

请注意,这段代码假定您的 MEDIA_URL 的值是 'media/'。它将调用 serve() 视图,传递 URLconf 中的路径和(必需的) document_root 参数。

由于定义这种 URL 模式可能会变得有点麻烦,Django 提供了一个小的 URL 辅助函数 static(),它的参数是前缀,如 MEDIA_URL 和一个指向视图的点分隔路径,如 'django.views.static.service'。其他任何函数参数都将透明地传递给视图。

错误视图

Django 默认提供了一些处理 HTTP 错误的视图。要用你自己的自定义视图覆盖这些视图,请参见 自定义报错视图

404(页面没有找到))视图

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

当你在视图中提出 Http404 时,Django 会加载一个专门处理 404 错误的视图。默认情况下,它是视图 django.views.defaults.page_not_found(),如果你在根模板目录下创建了模板 404.html,那么它要么产生“Not Found”消息,要么加载并渲染它。

默认的 404 视图将向模板传递两个变量:request_path,这是导致错误的 URL,和 exception,这是触发视图的异常的有用表示(例如,包含传递给特定 Http404 实例的任何消息)。

关于 404 视图需要注意的三个要点:

  • 如果 Django 在检查了 URLconf 中的每一个正则表达式后都没有找到匹配的结果,也会调用 404 视图。

  • 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,则会产生一个“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,如果此文件不存在,则根据 RFC 9110 Section 15.5.4 (HTTP 1.1 规范)提供文本 "403 Forbidden"。模板上下文包含 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')

Similarly, Django has a view to handle 400 Bad Request errors.

This view either produces a "Bad Request" message or loads and renders the template 400.html if you created it in your root template directory. It returns with status code 400 indicating that the error condition was the result of a client operation. By default, nothing related to the exception that triggered the view is passed to the template context, as the exception message might contain sensitive information like filesystem paths.

django.views.defaults.bad_request is triggered by a BadRequest exception. Also, when a SuspiciousOperation is raised in Django, it may be handled by a component of Django (for example resetting the session data). If not specifically handled, Django will consider the current request a 'bad request' instead of a server error, and handle it with bad_request.

bad_request 视图也只有在 DEBUG`False 时才能使用。

相关内容

热门资讯

玻璃硬盘原理图 玻璃硬盘原理 玻璃硬盘,又称为磁头悬浮硬盘(Magnetic Head Flying Disk,MHFD),是一种...
闲鱼搜索规则与技巧 闲鱼最新特... 在闲鱼这个二手交易平台上,有很多用户都希望能够找到一些特殊的东西,比如一些罕见的收藏品、独特的手工艺...
家里监控最长能保存多少天的记录... 家里监控一般保存多久 随着科技的发展,家庭监控系统已经成为了许多家庭的必备设备,它不仅可以帮助我们...
华为tag有用吗 华为tag-... 华为Tag是华为手机中的一种功能,它可以帮助用户更好地管理自己的手机数据和应用,通过使用华为Tag,...
ps5手柄可用手机快充充电吗 ... PS5手柄,即PlayStation 5的DualSense手柄,是索尼公司为PlayStation...
QQ音乐提示代理模式可能无法正... QQ音乐提示代理模式可能无法正常访问,如上图所示,是怎么回事呢? 这个可能和你的网络设置有关系,首先...
收到微信有提示音怎么去掉 微信... 微信收到信息没有提示音,可能是由多种原因导致的,以下是一些可能的原因及解决方法: 1. 手机静音或...
a100显卡对应的cuda版本 在进行GPU加速的编程中,CUDA是常用的架构和平台,其版本和显卡型号之间存在着一定的对应关系。本篇...
别人打电话听不见我说话怎么回事... 当我们在使用手机时,可能会遇到别人打电话过来听不见声音的情况,这种情况可能是由多种原因导致的,下面我...
苹果手机非通讯录电话打不进来 ... 手机电话打不进来可能有多种原因,以下是一些常见的问题及解决方法: 1. **信号问题**: ...