在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在命令行下使用google翻译(带语音)
Jan 16 Python
你所不知道的Python奇技淫巧13招【实用】
Dec 14 Python
Python 遍历子文件和所有子文件夹的代码实例
Dec 21 Python
Django model select的多种用法详解
Jul 16 Python
python爬虫 2019中国好声音评论爬取过程解析
Aug 26 Python
python3 实现口罩抽签的功能
Mar 11 Python
新建文件时Pycharm中自动设置头部模板信息的方法
Apr 17 Python
解决echarts中饼图标签重叠的问题
May 16 Python
如何打包Python Web项目实现免安装一键启动的方法
May 21 Python
python求解汉诺塔游戏
Jul 09 Python
基于Python的接口自动化unittest测试框架和ddt数据驱动详解
Jan 27 Python
Pytorch 图像变换函数集合小结
Feb 01 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 ftp文件上传函数(基础版)
2010/06/03 PHP
ie与session丢失(新窗口cookie丢失)实测及解决方案
2013/07/15 PHP
php中json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案
2016/05/31 PHP
laravel自定义分页效果
2017/07/23 PHP
麦鸡的TAB切换功能结合了javascript和css
2007/12/17 Javascript
Jquery从头学起第四讲 jquery入门教程
2010/08/01 Javascript
使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)
2011/07/10 Javascript
原生js和jquery中有关透明度设置的相关问题
2014/01/08 Javascript
jQuery Ajax使用实例
2015/04/16 Javascript
javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法
2015/05/13 Javascript
jquery实现全选、反选、获得所有选中的checkbox
2020/09/13 Javascript
JQuery日期插件datepicker的使用方法
2016/03/03 Javascript
vue.js数据绑定的方法(单向、双向和一次性绑定)
2017/07/13 Javascript
vuejs 切换导航条高亮(路由菜单高亮)的方法示例
2018/05/29 Javascript
JS监听事件的叠加和移除功能
2018/11/19 Javascript
cocos2dx+lua实现橡皮擦功能
2018/12/20 Javascript
JavaScript实现刮刮乐效果
2020/11/01 Javascript
[04:42]2015国际邀请赛CDEC战队晋级之路
2015/08/13 DOTA
跟老齐学Python之有容乃大的list(3)
2014/09/15 Python
全面分析Python的优点和缺点
2018/02/07 Python
Python request设置HTTPS代理代码解析
2018/02/12 Python
django admin组件使用方法详解
2019/07/19 Python
Tensorflow 使用pb文件保存(恢复)模型计算图和参数实例详解
2020/02/11 Python
基于python 取余问题(%)详解
2020/06/03 Python
python中os.remove()用法及注意事项
2021/01/31 Python
利用HTML5的新特点实现图片文件异步上传
2014/05/29 HTML / CSS
The Beach People美国:澳洲海滨奢华品牌
2018/07/05 全球购物
Boolean b = new Boolean(“abcde”); 会编译错误码
2013/11/27 面试题
个人教师自我评价范文
2013/12/02 职场文书
办理护照介绍信
2014/01/16 职场文书
政府绩效管理实施方案
2014/05/04 职场文书
好学生评语大全
2014/05/05 职场文书
2014年民主评议党员个人总结
2014/09/24 职场文书
2015年师德师风承诺书
2015/01/22 职场文书
毕业答辩开场白范文
2015/05/27 职场文书
Oracle查看表空间使用率以及爆满解决方案详解
2022/07/23 Oracle