在做一个web时,总是会出现各种错误,如400、403、404、500等。一般开发都要做对应的处理,给一些友好提示,或返回一些公益广告等。

在Django中,默认提供了常见的错误处理方式,比如:

handler404 = 'polls.views.my_custom_page_not_found_view'
handler500 = 'polls.views.my_custom_error_view'
handler403 = 'polls.views.my_custom_permission_denied_view'
handler400 = 'polls.views.my_custom_bad_request_view'

handler*名称都是固定的,不能随意更改,Django已经约定好的,不同的状态码对应不同的错误。另外这些配置都需要写入到项目入口的urls.py文件中,不能写入到应用的urls.py文件中,不然不会生效。对于值需要引入写好的视图函数,写绝对路径。

为什么写入应用urls.py文件不生效呢?因为当程序抛出Http404异常时,Django会加载一个特殊的view方法处理404错误。默认地, 它是django.views.defaults.page_not_found,负责加载和渲染404.html模板文件。这意味着我们必须在模板根目录定义404.html模板文件,该模板文件应用于所有的404异常。

下面我们定义一个404异常的处理。

首先在根urlconf中配置handler404处理逻辑如下:

handler404 = "mysite.views.page_not_found"               #mysite是app名字,views是app下面的views.py文件,后面的page_not_found表示视图函数名字

#注意:一定是根urlconf中。

然后再对应的app下面定义函数,上面是在mysite这个app下面定义的views.py中。

from django.http import HttpResponseNotFound

def page_not_found(request):
return HttpResponseNotFound("Fucking!")

然后需要关闭django的debug模式,并且需要定义ALLOWED_HOSTS选项。

DEBUG = False

ALLOWED_HOSTS = ["*"]

然后启动django,访问一个不存在的页面。

[root@test2 ~]# curl 172.16.100.19:/werwer/
Fucking!

这里我们只返回了一个字符串,自然也可以返回一个完整的html页面。

最新文章

  1. Android学习十二:跑马灯程序实现(简单联系)
  2. DeviceOne 让你一见钟情的App快速开发平台
  3. Listbox与Listbox with key的区别
  4. zabbix网络发现
  5. Array JSON
  6. 【转载】#274 - Can't Overload if Methods Differ Only by ref and out Modifiers
  7. 关于IE调试模式下才能显示效果
  8. day-3
  9. web系列教程之php 与mysql 动态网站 。检索 与更新。
  10. centos下yum安装crontab+mysql自动备份
  11. ES CPU和磁盘IO升高
  12. wemall app商城源码Android之支付宝接口公用函数
  13. 做ppt经常使用站点
  14. java克隆之深拷贝与浅拷贝
  15. zipline-- 开发指南
  16. sqli-labs安装
  17. pycharm修改注释颜色
  18. python numpy的transpose函数用法
  19. sencha touch 自定义cardpanel控件 模仿改进NavigationView 灵活添加按钮组,导航栏,自由隐藏返回按钮(废弃 仅参考)
  20. OpenCV学习(24) 直方图(1)

热门文章

  1. AC自动机模板2
  2. MySQL数据类型--与MySQL零距离接触2-12主键约束
  3. fill和memset的区别
  4. 阿里云esc服务器上部署java项目
  5. POJ 2155 Matrix(二维BIT)
  6. c# Mongodb创建自增列
  7. XML小结
  8. MYSQL导入数据时,出现错误:Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1
  9. GDTR与LDTR
  10. 《大话设计模式》c++实现 之工厂模式