django自定义错误响应

Posted wxzhe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django自定义错误响应相关的知识,希望对你有一定的参考价值。

在做一个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,访问一个不存在的页面。

[[email protected] ~]# curl 172.16.100.19:80/werwer/
Fucking!

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



以上是关于django自定义错误响应的主要内容,如果未能解决你的问题,请参考以下文章

从 django rest 框架中的序列化程序发送自定义错误响应?

django自定义错误响应

Kong 自定义错误消息/响应

DJANGO 自定义分页组件

如何根据响应的错误代码返回自定义 axios 响应

Django:如何检查自定义小部件定义中是不是存在字段错误?