Built-in Views-Django1.7

Built-in Views

许多Django的内建视图记录在Writing views,就像其他地方有关视图的文件一样。

在开发中管理(server)文件

static.serve(requestpathdocument_rootshow_indexes=False)

也许有很多文件不仅仅是你项目中的静态文件(assets),为了方便,你会选择让Django替你管理本地的开发文件。The serve()视图函数可以被用于管理任何你给定的文件路径(这个视图函数并不适合生产环境,应该只作为开发时的帮助工具使用,你应该在生产环境中使用真正的前端服务器来管理这些文件)。

最可能的使用例子是用户上传到 MEDIA_ROOTdjango.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(requesttemplate_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(requesttemplate_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(requesttemplate_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(requesttemplate_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时可用。

 

posted @ 2014-12-22 15:39  落叶落叶  阅读(193)  评论(0)    收藏  举报