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

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

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

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    nagios对windows流量的检测
    Zabbix中文使用手册
    SNMP的应用
    十大经典排序算法最强总结(含JAVA代码实现)
    各种排序算法总结和比较
    MyBatis的Insert操作详解
    MyBatis 返回insert操作主键
    MyBatis insert/delete/update 的返回值
    利用aopc创建schema失败
    neo4j开发自定义存储过程注意事项
  • 原文地址:https://www.cnblogs.com/wxzhe/p/10314796.html
Copyright © 2020-2023  润新知