在做一个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页面。

django自定义错误响应的更多相关文章

  1. django自定义错误处理

    要实现自定义错误处理的功能,总共分4步: 1.创建html错误页 2.配置settings ,当DEBUG=True,则不会生效 3.编写视图 4.配置url views.py   def page_ ...

  2. MVC4 自定义错误页面(转)

    一.概述 MVC4框架自带了定义错误页,该页面位于Shared/Error,该页面能够显示系统未能捕获的异常,如何才能使用该页面: 二.使用步骤: 1.配置WebConfig文件,在System.We ...

  3. ASP.NETMVC自定义错误页面真的简单吗?

    Note:文章前半部分翻译自 http://benfoster.io/blog/aspnet-mvc-custom-error-pages ,着急的可直接看总结~ 如果你在设置asp.net mvc自 ...

  4. ASP.NET中处理自定义错误的最佳方式

    要在ASP.NET中处理好自定义错误(Custom Errors)首先要抛弃使用web.config\customErrors. <customErrors mode="RemoteO ...

  5. MVC4 自定义错误页面(三)

    一.概述 MVC4框架自带了定义错误页,该页面位于Shared/Error,该页面能够显示系统未能捕获的异常,如何才能使用该页面: 二.使用步骤: 1.配置WebConfig文件,在System.We ...

  6. django 自定义标签和过滤器

    django 自定义标签和过滤器 Django支持自定义标签和过滤器.起初还不太重视它这项功能,但最近试了试自定义标签.发现django这个功能实在是太爽了. 首先在你项目的一个app中建立一个pyt ...

  7. ASP.NET自定义错误页面

    ASP.NET自定义错误页面 ASP.NET 提供三种用于在出现错误时捕获和响应错误的主要方法:Page_Error 事件.Application_Error 事件以及应用程序配置文件 (Web.co ...

  8. python django 自定义 装饰器

    # -*-coding:utf-8-*- __author__ = "GILANG (pleasurelong@foxmail.com)" """ d ...

  9. IIS下自定义错误页面配置的两种方式(亲测可行)--IIS服务器

    网站自定义错误页面的设置,大家应该都知道它的重要性……不多说,下面带大家一步步在IIS下设置网站自定义错误页面…… 1.首先进入你的网站主页,找到[错误页](注意是IIS下的错误页不是.NET错误页) ...

随机推荐

  1. one order 理解

    1: one order core

  2. MYSQL: set names utf8是什么意思?

    set names utf8 是用于设置编码,可以再在建数据库的时候设置,也可以在创建表的时候设置,或只是对部分字段进行设置,而且在设置编码的时候,这些地方最好是一致的,这样能最大程度上避免数据记录出 ...

  3. 【UML】-NO.40.UML.1.UML.1.001-【UML】- uml

    1.0.0 Summary Tittle:[UML]-NO.40.UML.1.UML.1.001-[UML]- uml Style:DesignPattern Series:DesignPattern ...

  4. MySQL数据类型--与MySQL零距离接触 3-2 外键约束的要求解析

    列级约束:只针对某一个字段 表级约束:约束针对2个或2个以上的字段 约束类型是按功能来划分. 外键约束:保持数据一致性,完整性.实现数据表的一对一或一对多的关系.这就是把MySQL称为关系型数据库的根 ...

  5. idc交叉引用

    #查找所有调用MSHookFunction的地方 ea=LocByName("MSHookFunction") if None !=ea: refs = idautils.Code ...

  6. Cocos Creator 获取节点的方式

    1.通过find方式获取//获取节点 var node=cc.find("Canvas/logo"); //获取精灵组件 var sprite=node.getComponent( ...

  7. cocos2d JS 利用定时器实现-倒计时功能

    //创建一个定时器 cc.director.getScheduler().schedule(this, this.updates, 1, cc.REPEAT_FOREVER, 0, false, &q ...

  8. soapUI学习文档(转载)

    soapUI 学习文档不是前言的前言记得一个搞开发的同事突然跑来叫能不能做个WebService 性能测试,当时我就凌乱了,不淡定啊,因为我是做测试的,以前连WebService 是什么不知道,毕竟咱 ...

  9. VS2010 运行时 出现cmd窗口的设置方法

     项目 - 属性 -生成事件 --后期生成事件 ->命令行 (editbin /SUBSYSTEM:CONSOLE $(OUTDIR)\$(ProjectName).exe)        注: ...

  10. Install the mongdb

    #!/bin/bash#Function: Install the mongdb#Author: WangDonghui#Date: 20180124 #Installing mongdbecho & ...