Movatterモバイル変換


[0]ホーム

URL:


Skip to main content
Django

The web framework for perfectionists with deadlines.

文档

内置视图

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

为开发中的文件提供服务

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

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

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

fromdjango.confimportsettingsfromdjango.urlsimportre_pathfromdjango.views.staticimportserve# ... the rest of your URLconf goes here ...ifsettings.DEBUG:urlpatterns+=[re_path(r'^media/(?P<path>.*)$',serve,{'document_root':settings.MEDIA_ROOT,}),]

注意,这段代码假设你的MEDIA_URL 的值是'/media/'。这将调用service() 视图,传递 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 模板,如果这个文件不存在将会显示“403 Forbidden”,按照RFC 7231#section-6.5.3 (HTTP 1.1 规范)。 模板上下文包含exception,它是触发视图的异常的字符串表示形式。

django.views.defaults.permission_denied 由一个PermissionDenied 异常触发。要拒绝一个视图的访问,你可以使用这样的代码:

fromdjango.core.exceptionsimportPermissionDenieddefedit(request,pk):ifnotrequest.user.is_staff:raisePermissionDenied# ...

400(错误请求)视图

defaults.bad_request(request,exception,template_name='400.html')

当 Django 中发生了一个SuspiciousOperation 时,可能会被 Django 的某个组件处理(比如重置会话数据)。如果没有特别处理,Django 会将当前请求视为“bad request”而不是服务器错误。

django.views.defaults.bad_request,在其他方面与server_error 视图非常相似,但返回的状态码为 400,表示错误条件是由客户端操作造成的。默认情况下,与触发该视图的异常无关的任何内容都不会传递给模板上下文,因为异常消息可能包含文件系统路径等敏感信息。

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

Back to Top

Additional Information

Support Django!

Support Django!

Contents

Getting help

FAQ
Try the FAQ — it's got answers to many common questions.
Index,Module Index, orTable of Contents
Handy when looking for specific information.
Django Discord Server
Join the Django Discord Community.
Official Django Forum
Join the community on the Django Forum.
Ticket tracker
Report bugs with Django or Django documentation in our ticket tracker.

Download:

Offline (Django 3.1):HTML |PDF |ePub
Provided byRead the Docs.

This document is for an insecure version of Django that is no longer supported. Please upgrade to a newer release!

[8]ページ先頭

©2009-2025 Movatter.jp