错误处理视图
如果Django找不到与请求URL匹配的模式时,或者在此过程中发生错误,那么Django 框架将调用错误处理视图进行处理。
Django根据django.conf.urls包中4个变量的值来确定使用哪个视图处理错误:
handler404
当用户请求的URL地址未找到(对应状态码:404)时,Django框架将调用handler404 变量指向的视图,它的默认值为'django.views.defaults.page_not_found'。
改变handler404的值,即可使Django框架在发生404错误时调用你的视图函数。 例如,下面的示例使用一个简单的公益寻人启事来处理404错误:
def child_lost(req):
return HttpResponse('<h1>寻人启事</h1>')
handler404 = child_lost
handler400
当用户发出的是无效请求(对应状态码:400)时,Django框架将调用handler400变量 指向的视图,它的默认值为'django.views.defaults.bad_request'。
handler403
当用户的请求无权限(对应状态码:403)时,Django框架将调用handler403变量指向 的视图,它的默认值为'django.views.defaults.permission_denied'。
handler500
如果服务器处理用户请求时发生了错误,Django框架将调用handler500变量指向的视图, 它的默认值是'django.views.defaults.server_error'。
需要注意的是:
- 必须在根路由配置模块设置上述变量,否则无效
- 必须设置全局配置对象的DEBUG属性值为False。因为在调试模式下,这些错误处理 总是被调试栈接管,你将看不到效果。
将DEBUG属性配置为True的额外需求是,Django要求设置全局配置对象的ALLOWED_HOSTS 属性,以显式地声明允许访问站点的主机。我们简单地放行所有主机:
settings.ALLOWED_HOSTS = ['*',]
修改示例代码:
1.创建视图v_403,使其返回HttpResponse(status=403)
2.将视图v_403绑定到URL模式^403/$
3.定制403错误视图