Django: 路由与视图 互动版

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

错误处理视图

如果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'


需要注意的是:

  1. 必须在根路由配置模块设置上述变量,否则无效
  2. 必须设置全局配置对象的DEBUG属性值为False。因为在调试模式下,这些错误处理 总是被调试栈接管,你将看不到效果。

DEBUG属性配置为True的额外需求是,Django要求设置全局配置对象的ALLOWED_HOSTS 属性,以显式地声明允许访问站点的主机。我们简单地放行所有主机:

settings.ALLOWED_HOSTS = ['*',]

修改示例代码:

1.创建视图v_403,使其返回HttpResponse(status=403)

2.将视图v_403绑定到URL模式^403/$

3.定制403错误视图