Built-in Views-Django1.7
Built-in Views
许多Django的内建视图记录在Writing views,就像其他地方有关视图的文件一样。
在开发中管理(server)文件
static.serve(request, path, document_root, show_indexes=False)
也许有很多文件不仅仅是你项目中的静态文件(assets),为了方便,你会选择让Django替你管理本地的开发文件。The serve()视图函数可以被用于管理任何你给定的文件路径(这个视图函数并不适合生产环境,应该只作为开发时的帮助工具使用,你应该在生产环境中使用真正的前端服务器来管理这些文件)。
最可能的使用例子是用户上传到 MEDIA_ROOT. django.contrib.staticfiles的内容被用作静态资源,而且没有为用户上传文件的内建处理代码,但是你可使用Django管理你的MEDIA_ROOT,通过添加一些像你的URLconf一样的东西:
from django.conf import settings # ... the rest of your URLconf goes here ... if settings.DEBUG: urlpatterns += patterns('', url(r'^media/(?P<path>.*)$', 'django.views.static.serve', { 'document_root': settings.MEDIA_ROOT, }), )
注意,这个代码片段假设你的MEDIA_ROOT等于"/media/"。它将会通过URLconf获得的路径和(必需)document_root参数调用serve()视图函数。
然而对于定义URL模式,它可以变成一个小麻烦,Django附带了一个小的URL帮助函数 static() ,该函数把MEDIA_URL等作为参数的前缀,和一个用点修饰的通往view的路径。就像“django.views.static.serve”。所有其他的参数将会显式的传给view。
Error views
Django使用了一些views作为默认view处理HTTP errors。重写这些view自定义你的view,详见 Customizing error views.
The 404 (page not found) view
- defaults.page_not_found(request, template_name='404.html')¶
当你在一个view中引起Http404错误,Django会载入一些特殊的view来处理404错误。默认的,django.views.defaults.page_not_found(),这个view函数会产生一个非常简单的“Not Found”消息或者重定向到模板404.html,如果你在根模板路径下创建了这个文件。
这个默认的404view将会传递一个变量给模板:request_path,即错误产生的URL。
三件关于404view需要注意的事情:
- The 404view也会在Django不能在正则表达式中找到合适的URL时调用。
- The 404 view 会传递一个RequestContext 并且会获得你的TEMPLATE_CONTEXT_PROCESSORS设定里的变量。
- 如果DEBUG被设定为True,then 你的404view将不会有机会被调用,并且作为替代你的URLconf将会被显示,还有显示一些DEBUG信息。
The 500 (server error) view¶
- defaults.server_error(request, template_name='500.html')¶
相同的,如果在你的view代码中发生了runtime error Django也会执行特殊动作。如果一个view产生一个异常,Django会默认的调用django.views.defaults.server_error,这个view会产生一个简单的“Server Error”消息或者重定向调用500.html模板,如果该模板存在。
默认的500view不会给500.html传递任何变量,并且会传递一个空的Context以减少附加错误的危险。
如果DEBUG被设定为True,then 你的500view将不会有机会被调用,并且作为替代你的URLconf将会被显示,还有显示一些DEBUG信息。
The 403 (HTTP Forbidden) view¶
- defaults.permission_denied(request, template_name='403.html')
- 和404和500的情况相同,Django会用一个view来处理403 Forbidden错误。如果一个view引起一个403异常,Django会默认的调用django.views.defaults.permission_denied,这个view重定向调用403.html模板或者如果403.html文件不存在产生一个“403 Forbidden”,如同RFC 2616 (the HTTP 1.1 说明).
- django.views.defaults.permission_denied 由PermissionDenied 异常引发。为了拒绝访问view,你可以用下列代码:
from django.core.exceptions import PermissionDenied def edit(request, pk): if not request.user.is_staff: raise PermissionDenied # ...
The 400 (bad request) view¶
- defaults.bad_request(request, template_name='400.html')¶
- 当一个 SuspiciousOperation异常被引起时,它可能会被一个Django组件处理(例如: resetting the session data)。如果没有特殊的处理程序,Django将会把当前的request认为是一个“bad request”,而不是一个server error。
- django.views.defaults.bad_request在很多方面都和server_error view都很相似,但是它的返回会带有一个状态代码400,表示error的情况是一个cilent 操作的结果。
- bad_request view 也是只会在DEBUG被设为False时可用。

浙公网安备 33010602011771号