码迷,mamicode.com
首页 > 其他好文 > 详细

django自定义错误响应

时间:2019-01-24 16:35:09      阅读:695      评论:0      收藏:0      [点我收藏+]

标签:iss   文件中   ret   sts   错误处理   tom   conf   port   自定义   

在做一个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:80/werwer/
Fucking!

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

django自定义错误响应

标签:iss   文件中   ret   sts   错误处理   tom   conf   port   自定义   

原文地址:https://www.cnblogs.com/wxzhe/p/10314796.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!