django1.8 view(6): Built-in Views
2015-08-09 16:49
519 查看
此文翻译自django1.8.2的官方文档,The view layer中的Built-in-Views段
可能有项目的静态资产(注:py文件)之外的文件要处理,为了方便,你可以在本地开发时用django serve.视图serve()能够用于任何你给定的目录.(这个视图不够强大,只能用于开发环境,不要用于生产环境,生产环境里应该使用真正的前端web server).
最常用的例子是在MEDIA_ROOT里用户上传的内容.django.contrib.staticfiles是为了处理静态资产,而且没有内置函数来处理用户上传的文件,但是你可以用django处理MEDIA_ROOT,通过在你的URLconf里添加内容:
注意:这段代码假设你的MEDIA_URL的值是’/media/’.他会调用serve()视图,传递URLconf里的路径和document_root(必需)变量.
因为这样定义URL pattern有点复杂,django自带一个小URL helper函数static().
当你在视图里抛Http404异常时,django会加载一个特殊的视图来处理404错误.默认是视图django.views.defaults.page_not_found(),它提供一个非常简单的’Not Found’信息或者加载和渲染模板404.html,如果你在模板根目录下创建了它.
默认的404视图传递一个变量给模板:request_path,就是导致错误的URL.
关于404视图有3点要注意:
如果django在URLconf里检查了每个正则都没有找到匹配URL的,也会调用404视图.
404视图会传递RequestContext,并连接到template context processers(例如MEDIA_URL)提供的变量.
如果DEBUG设置为True(在setting模块里).那么你的404视图就不会被使用,而是URLconf起作用,会有一些debug信息.
在视图代码里,如果有运行时错误,django会执行特定的行为.如果一个视图有异常.默认,django会调用视图django.views.defaults.server_error,提供一个简单的’Server Error’信息或加载并渲染500.html如果你在模板根目录里创建了500.html.
默认的500视图不会传参给500.html模板,并且会用空的Context来渲染,以免造成其他错误.
如果DEBUT设置为True,500视图不会被调用,traceback和一些debug信息会显示.
和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异常触发.你可以这样在代码中拒绝访问.
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.
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 settings from 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点要注意:
如果django在URLconf里检查了每个正则都没有找到匹配URL的,也会调用404视图.
404视图会传递RequestContext,并连接到template context processers(例如MEDIA_URL)提供的变量.
如果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 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’)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.
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- Python 七步捉虫法