Django 2.1.3 视图层 内置视图

装饰器 | 总目录


Django的几个内置视图记录在 写入视图 以及文档中的 其他位置。

1. 在开发中提供文件

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

除了项目的静态资源之外,可能还有其他文件,为方便起见,您希望Django在本地开发中为您服务。serve()视图可用于为您给的任何目录提供服务。(此视图不会用于生产用途应仅用作开发辅助;您应使在生产中为真正的Web服务器提供这些文件)。

最可能的例子是用户上传的内容目录[ MEDIA_ROOT ] z(https://docs.djangoproject.com/en/2.1/ref/settings/#std:setting-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作为prefix参数,任何其他函数参数将透明地传递给视图。

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

2. 错误视图

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视图的三点注意事项:

  • 如果在检查URLconf中的每个正则表达式后Django没有找到匹配项,也会调用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模板,则加载并呈现模板。

默认的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 Forbidden”,按照RFC 7231#section-6.5.3(HTTP 1.1规范)。模板上下文包含exception,它是触发视图的异常的字符串表示形式。

django.views.defaults.permission_deniedPermissionDenied异常触发 。要拒绝在视图中访问,您可以使用以下代码:

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会将当前请求视为“错误请求”而不是服务器错误。

否则与server_error视图非常相似 ,但返回状态代码400,表示错误条件是客户端操作的结果。默认情况下,与触发视图的异常无关的任何内容都会传递给模板上下文,因为异常消息可能包含敏感信息,如文件系统路径。

bad_request视图时也只用用在DEBUG=False的时候。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值