django1.8 view(6): Built-in Views

来源:互联网 发布:淘宝店铺层级怎么计算 编辑:程序博客网 时间:2024/04/25 19:54

此文翻译自django1.8.2的官方文档,The view layer中的Built-in-Views段

Built-in Views

文档中的writing views部分及其他部分用到了一些django的内置视图.

Servint files in development(开发阶段的静态文件处理)

  • static.serve(request, path, document_root, show_indexed=False)
    可能有项目的静态资产(注:py文件)之外的文件要处理,为了方便,你可以在本地开发时用django serve.视图serve()能够用于任何你给定的目录.(这个视图不够强大,只能用于开发环境,不要用于生产环境,生产环境里应该使用真正的前端web server).
    最常用的例子是在MEDIA_ROOT里用户上传的内容.django.contrib.staticfiles是为了处理静态资产,而且没有内置函数来处理用户上传的文件,但是你可以用django处理MEDIA_ROOT,通过在你的URLconf里添加内容:
from django.conf import settingsfrom django.views.static import serve# ...the rest of your URLconf goes here...if setting.DEBUG:    urlpatterns += [        url(r'^media/(?P<path>.*)$', serve, {'document_root': 'settings.MEDIA_ROOT'}),]

注意:这段代码假设你的MEDIA_URL的值是’/media/’.他会调用serve()视图,传递URLconf里的路径和document_root(必需)变量.
因为这样定义URL pattern有点复杂,django自带一个小URL helper函数static().

Error views

django自带处理HTTP错误的几个视图.如果想要重写你自己定制的视图,请看Customizing error views.

The 404 (page not fount) view

  • defaults.page_not_found(request, template_name=’404.html’)
    当你在视图里抛Http404异常时,django会加载一个特殊的视图来处理404错误.默认是视图django.views.defaults.page_not_found(),它提供一个非常简单的’Not Found’信息或者加载和渲染模板404.html,如果你在模板根目录下创建了它.
    默认的404视图传递一个变量给模板:request_path,就是导致错误的URL.
    关于404视图有3点要注意:
    1. 如果django在URLconf里检查了每个正则都没有找到匹配URL的,也会调用404视图.
    2. 404视图会传递RequestContext,并连接到template context processers(例如MEDIA_URL)提供的变量.
    3. 如果DEBUG设置为True(在setting模块里).那么你的404视图就不会被使用,而是URLconf起作用,会有一些debug信息.

The 500 (server error) view

  • defaults.server_error(request, template_name=’500.html’)
    在视图代码里,如果有运行时错误,django会执行特定的行为.如果一个视图有异常.默认,django会调用视图django.views.defaults.server_error,提供一个简单的’Server Error’信息或加载并渲染500.html如果你在模板根目录里创建了500.html.
    默认的500视图不会传参给500.html模板,并且会用空的Context来渲染,以免造成其他错误.
    如果DEBUT设置为True,500视图不会被调用,traceback和一些debug信息会显示.

The 403 (HTTP Forbidden) view

  • defaults.permission_denied(request, template_name=’403.html’)
    和400,500视图风格相同,django有视图处理403 Forbidden错误.如果视图抛出了403异常,默认,django会调用视图django.views.defaults.permission_denied.
    这个视图加载并渲染模板根目录下的403.html.如果文件不存在,会提供文本’403 Forbidden.’,这符合RFC 2616(HTTP1.1标准).
    django.views.defaults.permission_denied会被PermissionDenied异常触发.你可以这样在代码中拒绝访问.
from django.core.exceptions import PermissionDenieddef edit(request, pk):    if not request.user.is_staff:        raise PermissionDenied    # ...

The 400 (bad request) view

  • defaults.bad_request(request, template_name=’400.html’)
    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.
    django.views.defaults.bad_request, is otherwise very similar to the server_error view, but returns with the status code 400 indicating that the error condition was the result of a client operation.
    bad_request views are also only used when DEBUG is False.
0 0