在Python的Django框架中编写错误提示页面


Posted in Python onJuly 22, 2015

你应该在生产环境中把TEMPLATE_DEBUGFalse 如果这个设为`` True`` ,为了在那个好看的错误页面上显示足够的东西,Django的模版系统就会为每一个模版保存一些额外的信息。
实现一个404模板

如果`` DEBUG`` 设置为`` True`` ,Django会显示那个自带的404错误页面。 但如果`` DEBUG`` 被设置成`` False`` ,那它的行为就不一样了: 他会显示一个在你的模版根目录中名字叫`` 404.html`` 的模版 所以,当你准备部署你的应用时,你会需要创建这个模版并在里面放一些有意义的“页面未找到”的信息

这里有一个`` 404.html``的示例,你可以从它开始。 假定你使用的模板继承并定义一个 `` base.html``,该页面由titlecontent两块组成。

{% extends "base.html" %}

{% block title %}Page not found{% endblock %}

{% block content %}
<h1>Page not found</h1>

<p>Sorry, but the requested page could not be found.</p>
{% endblock %}

要测试你的404.html页面是否正常工作,仅仅需要将DEBUG 设置为`` False`` ,并且访问一个并不存在的URL。 (它将在`` sunserver`` 上工作的和开发服务器上一样好)
实现一个500模板

类似的,如果`` DEBUG`` 设置为`` False`` ,Djang不再会显示它自带的应对未处理的Python异常的错误反馈页面。 作为代替,它会查找一个名为`` 500.html`` 的模板并且显示它。 像`` 404.html`` 一样,这个模板应该被放置在你的模板根目录下。

这里有一个关于500.html的比较棘手的问题。你永远不能确定`` 为什么``会显示这个模板,所以它不应该做任何需要连接数据库,或者依赖任何可能被破坏的基础构件的事情。 (例如:它不应该使用自定义模板标签。)如果它用到了模板继承,那么父模板也就不应该依赖可能被破坏的基础构件。 因此,最好的方法就是避免模板继承,并且用一些非常简单的东西。 这是一个`` 500.html`` 的例子,可以把它作为一个起点:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
  "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
  <title>Page unavailable</title>
</head>
<body>
  <h1>Page unavailable</h1>

  <p>Sorry, but the requested page is unavailable due to a
  server hiccup.</p>

  <p>Our engineers have been notified, so check back later.</p>
</body>
</html>

设置错误警告

当你使用Django制作的网站运行中出现了异常,你会希望去了解以便于修正它。 默认情况下,Django在你的代码引发未处理的异常时,将会发送一封Email至开发者团队。但你需要去做两件事来设置这种行为。

首先,改变你的ADMINS设置用来引入你的E-mail地址,以及那些任何需要被注意的联系人的E-mail地址。 这个设置采用了类似于(姓名, Email)元组,像这样:

ADMINS = (
  ('John Lennon', 'jlennon@example.com'),
  ('Paul McCartney', 'pmacca@example.com'),
)

第二,确保你的服务器配置为发送电子邮件。 设置好postfix,sendmail或其他本书范围之外但是与Django设置相关的邮件服务器,你需要将将 EMAIL_HOST设置为你的邮件服务器的正确的主机名. 默认模式下是设置为'localhost', 这个设置对大多数的共享主机系统环境适用. 取决于你的安排的复杂性,你可能还需要设置 EMAIL_HOST_USER,EMAIL_HOST_PASSWORD,EMAIL_PORT或EMAIL_USE_TLS。

你还可以设置EMAIL_SUBJECT_PREFIX以控制Django使用的 error e-mail的前缀。 默认情况下它被设置为'[Django] '
设置连接中断警报

如果你安装有CommonMiddleware(比如,你的MIDDLEWARE_CLASSES设置包含了'django.middleware.common.CommonMiddleware'的情况下,默认就安装了CommonMiddleware),你就具有了设置这个选项的能力:有人在访问你的Django网站的一个非空的链接而导致一个404错误的发生和连接中断的情况,你将收到一封邮件. 如果你想激活这个特性,设置SEND_BROKEN_LINK_EMAILS 为True(默认为False),并设置你的MANAGERS为某个人或某些人的邮件地址,这些邮件地址将会收到报告连接中断错误的邮件. MANAGERS使用和ADMINS 同样的语法.例如:

MANAGERS = (
  ('George Harrison', 'gharrison@example.com'),
  ('Ringo Starr', 'ringo@example.com'),
)

请注意,错误的Email会令人感到反感,对于任何人来说都是这样。

Python 相关文章推荐
Python程序员鲜为人知但你应该知道的17个问题
Jun 04 Python
Python语言的12个基础知识点小结
Jul 10 Python
Python的高级Git库 Gittle
Sep 22 Python
Python的Flask框架标配模板引擎Jinja2的使用教程
Jul 12 Python
对pandas中Series的map函数详解
Jul 25 Python
python2与python3共存问题的解决方法
Sep 18 Python
详解pandas中MultiIndex和对象实际索引不一致问题
Jul 23 Python
Python 实现加密过的PDF文件转WORD格式
Feb 04 Python
python 截取XML中bndbox的坐标中的图像,另存为jpg的实例
Mar 10 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
May 19 Python
Python Matplotlib简易教程(小白教程)
Jul 28 Python
python进度条显示-tqmd模块的实现示例
Aug 23 Python
详解Django通用视图中的函数包装
Jul 21 #Python
在Python的Django框架中显示对象子集的方法
Jul 21 #Python
在Django的通用视图中处理Context的方法
Jul 21 #Python
Django框架中的对象列表视图使用示例
Jul 21 #Python
在Python的Django框架中使用通用视图的方法
Jul 21 #Python
在Django的模型中执行原始SQL查询的方法
Jul 21 #Python
在Django的模型中添加自定义方法的示例
Jul 21 #Python
You might like
PHP模板引擎SMARTY
2006/10/09 PHP
PHP 图片上传实现代码 带详细注释
2010/04/29 PHP
PHP经典面试题集锦
2015/03/19 PHP
PHP针对多用户实现更换头像功能
2016/09/04 PHP
ThinkPHP 模板substr的截取字符串函数详解
2017/01/09 PHP
js的onload事件及初始化按钮事件示例代码
2013/09/25 Javascript
jquery ajax post提交数据乱码
2013/11/05 Javascript
js jquery分别实现动态的文件上传操作按钮的添加和删除
2014/01/13 Javascript
js获得参数的getParameter使用示例
2014/02/26 Javascript
jquery淡化版banner异步图片文字效果切换图片特效
2014/04/08 Javascript
js精美的幻灯片画集特效代码分享
2015/08/29 Javascript
jquery mobile 移动web(5)
2015/12/20 Javascript
JS实现定时任务每隔N秒请求后台setInterval定时和ajax请求问题
2017/10/15 Javascript
浅谈Vue2.0中v-for迭代语法的变化(key、index)
2018/03/06 Javascript
vue debug 二种方法
2018/09/16 Javascript
Linux下使用python调用top命令获得CPU利用率
2015/03/10 Python
Python+django实现简单的文件上传
2016/08/17 Python
利用python求解物理学中的双弹簧质能系统详解
2017/09/29 Python
python读取文本中数据并转化为DataFrame的实例
2018/04/10 Python
在python环境下运用kafka对数据进行实时传输的方法
2018/12/27 Python
利用PyCharm操作Github(仓库新建、更新,代码回滚)
2019/12/18 Python
python使用python-pptx删除ppt某页实例
2020/02/14 Python
使用Python内置模块与函数进行不同进制的数的转换
2020/04/26 Python
Django ModelForm组件原理及用法详解
2020/10/12 Python
详解Python openpyxl库的基本应用
2021/02/26 Python
阿提哈德航空官方网站:Etihad Airways
2017/01/06 全球购物
应届生求职信写作技巧
2013/10/24 职场文书
战略合作意向书范本
2014/04/01 职场文书
家长写给孩子的评语
2014/04/18 职场文书
协商一致解除劳动合同协议书
2014/09/14 职场文书
2014年国庆节演讲稿精选范文1500字
2014/09/25 职场文书
个人务虚会发言材料
2014/10/20 职场文书
单位租房协议书范本
2014/12/04 职场文书
公司致全体员工的感谢信
2019/06/24 职场文书
Python编程中内置的NotImplemented类型的用法
2022/03/23 Python
Python捕获、播放和保存摄像头视频并提高视频清晰度和对比度
2022/04/14 Python