django “如何”系列7:错误汇报
当你正在运行一个公共的站点的时候,你应该关掉DEBUG设置。这将使你的服务器运行的更快,同时也能预防别有用心的用户从你的错误页面看到你应用的一些详细配置信息。然而,当debug为false的时候,你将永远看不到由你的站点产生的错误--所有人都只能看到你的公开的错误页面。出于你必须跟踪你部署的站点的错误,django可以配置成当那些错误发生的时候,创建这些错误汇报给你。
邮件汇报
服务器错误
当DEBUG设置为False的时候,无论什么时候你的代码引发一个处理不了的异常 然后导致服务器错误(500),django会给ADMINS设置里面的用户列表发送邮件。这使得管理员可以立刻知道任何错误的提示,邮件内容包含错误的描述,一个完整的python回溯和引发该错误的HTTP请求的详细信息。
注意的是,如果你想发送邮件成功的话,你还是要配置发送邮件需要的配置的,可以参考这个django Email
django默认以从root@loaclhost发送 邮件,然而,有些邮件提供商拒绝这个地址的所有邮件,所以你可以考虑配置SERVER_EMAIL
如果想禁用这个设置的话,直接把ADMINS配置移除就好
404错误
django也可以配置成当发生坏链的时候发送邮件(404错误),关于404错误,django会在下面情况成立的时候发送邮件
- DEBUG设置为False
- SEND_BROKEN_LINK_EMAILS设置为True
- 设置了CommonMiddleware中间件(默认是有的)
如果这些条件被满足的话,当你的代码跑出了404错误并且该请求有引用者的时候(没有引用者的不发送),django会往配置文件中的MANAGERS列表中的用户发送邮件。
你可以通过调整IGNORABLE_404_URLS设置告诉django那些404s是不用汇报的,设置是一个编译的正则表达式对象的元组,下面是一个例子:
import re
IGNORABLE_404_URLS = (
re.compile(r'^/apple-touch-icon.*\.png$'),
re.compile(r'^/favicon\.ico$'),
re.compile(r'^/robots\.txt$'),
)
禁用这个行为的最好的方法是设置SEND_BROKEN_LINK_EMAILS为假
过滤错误汇报
过滤敏感信息
错误汇报对于debug来说是非常有用的,所以错误汇报能记录越多相关的信息越好。然而,一些特定类型的信息因为太敏感而最好不要去回溯,比如用户的密码和信用卡号。因此,django提供了一些的函数装饰器让你能够控制那些信息应该在产品环境从错误汇报中过滤掉:sensitive_variables()和sensitive_post_parameters()
sensitive_variables(*variables)
如果你的代码中的一些函数使用本地变量存储一些可能敏感的信息的时候,你可以是用这个装饰器预防这些变量的值出现在错误汇报上面,如果这个装饰器没有任何参数的话,那么所有的本次变量都会被过滤掉
from django.views.decorators.debug import sensitive_variables
#仅仅会过滤user,pw和cc
@sensitive_variables('user', 'pw', 'cc')
def process_info(user):
pw = user.pass_word
cc = user.credit_card_number
name = user.name
...
#过滤所有本地变量
@sensitive_variables()
def my_function():
sensitive_post_parameters(*parameters)
类似sensitive_variables(),这个装饰器过滤的对象是POST方法的HTTP请求的中的变量
from django.views.decorators.debug import sensitive_post_parameters
#仅仅过滤POST变量中的pass_word和credit_card_number
@sensitive_post_parameters('pass_word', 'credit_card_number')
def record_user_profile(request):
UserProfile.create(user=request.user,
password=request.POST['pass_word'],
credit_card=request.POST['credit_card_number'],
name=request.POST['name'])
...
#过滤所有
@sensitive_post_parameters()
def my_view(request):
...
自定义错误汇报
sensitive_variables()和sensitive_post_patameters()所做的仅仅是标识那些被过滤的参数,真正的过滤是由django的默认错误过滤器:django.views.debug.SafeExceptionReporterFilter完成的。这个过滤器使用那两个装饰器的提示把对应的值替换成****来达到过滤的效果。因此,如果你想自定义默认的过滤行为,你可以定义你的过滤器类,然后设置给DEFAULT_EXCEPTION_REPORTER_FILTER,或者在视图函数里面指定过滤器类
DEFAULT_EXCEPTION_REPORTER_FILTER = 'path.to.your.CustomExceptionReporterFilter'
#在视图函数里面使用
def my_view(request):
if request.user.is_authenticated():
request.exception_reporter_filter = CustomExceptionReporterFilter()
...
你的过滤器类必须继承SafeExceptionReporterFilter这个类并且可能需要覆盖以下方法:
is_active(self,request):如果DEBUG为False,返回真。仅当is_active为真,其他的过滤器操作才能被激活
get_request_repr(self,request):返回请求对象的代表字符串,就是是用repr(request)得到的值,不过其中的POST参数是使用get_post_patamteters()方法得到的
get_post_parameters(self,request):返回过滤后的POST参数字典,敏感信息用*号替换
get_traceback_frame_variables(self,request,tb_frame):返回过滤后的给定回溯框架的本地变量的字典,敏感信息用*号替换
django “如何”系列7:错误汇报的更多相关文章
- Python+Django+SAE系列教程17-----authauth (认证与授权)系统1
通过session,我们能够在多次浏览器请求中保持数据,接下来的部分就是用session来处理用户登录了. 当然,不能仅凭用户的一面之词,我们就相信,所以我们须要认证. 当然了,Django 也提供了 ...
- Apache2.4部署django出现403 Forbidden错误解决办法
前言:Apache2.4部署django出现403 Forbidden错误最好要结合apache中的错误日志来观察出现何种错误导致出现403错误 下午百度了一下午没找到解决办法,试了n种方法,简直坑爹 ...
- Django学习系列之Form基础
Django学习系列之Form基础 2015-05-15 07:14:57 标签:form django 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追 ...
- 智能合约语言 Solidity 教程系列9 - 错误处理
这是Solidity教程系列文章第9篇介绍Solidity 错误处理. Solidity系列完整的文章列表请查看分类-Solidity. 写在前面 Solidity 是以太坊智能合约编程语言,阅读本文 ...
- 一点理解之 CmBacktrace: ARM Cortex-M 系列 MCU 错误追踪库
@2019-02-14 [小记] CmBacktrace: ARM Cortex-M 系列 MCU 错误追踪库,用来将单片机故障状态寄存器值翻译出来输出至终端上以便排错 CmBacktrace: AR ...
- django 分页出现 UnorderedObjectListWarning 错误
django 分页出现此错误: UnorderedObjectListWarning: Pagination may yield inconsistent results with an unorde ...
- 关于Django数据库mysql连接错误问题Connection to api@localhost failed. [08001] Could not create connection to d
Connection to api@localhost failed. [08001] Could not create connection to d 错误类型 django连接mysql数据库错误 ...
- django 2.0 xadmin 错误集锦
转载 django 2.0 xadmin 错误集锦 2018-03-26 10:39:18 Snail0Li 阅读数 5188更多 分类专栏: python 1.django2.0把from dj ...
- Django学习系列6:使用selenium测试用户交互
学习系列5中的单元测试有报错信息,这儿来编写functional_tests.py文件,扩充其中的功能测试 # File: functional_test.py # Author: Rxf # Cre ...
随机推荐
- BZOJ3172:[TJOI2013]单词——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=3172 某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单 ...
- 分享一个JQuery弹出层插件
JQuery插件TipsWindown 1.1 一个基于jQuery的弹出层.支持拖拽,支持内容为文字,图片,URL等!至于兼容性.在IE6下,弹出对像无法绝对固定.其他应该没啥大问题: 最新更新:( ...
- mybatis中parameterType可以写的别名
mybatis中parameterType可以写的别名 https://blog.csdn.net/sdzhangshulong/article/details/51749807 _byte byte ...
- Codeforces Round #332 (Div. 2)B. Spongebob and Joke
B. Spongebob and Joke time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- javascript功能封装
实现方式其实很简单,我在代码打上注释,大家就懂了! var _date=[],dateData=["1月","2月","3月",&qu ...
- python 面试题(1)
好用简洁的大数据技术:python.hadoop.R 慢慢学习,随时分享 1.什么是Python?使用Python有什么好处? Python是一种编程语言,它有对象.模块.线程.异常处理和自动内存管理 ...
- 状压DP的总结
状压dp的标志 ①数据小 ②通过题目所给出的条件以后得到的特征集合小 一:CF259div2 D: 题目大意:保证b[i]中每个数互质,给出a[i],然后求1~n的abs(a[i]-b[i])最小.a ...
- bzoj 4034: [HAOI2015]树上操作——树链剖分
Description 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中 ...
- 汕头市队赛 SRM19 字符题
从天上掉下来了个这样的问题: 有一个字符串 从中选出两个子串 A,B,求 A+B可以构成的不同串的个数. 还想知道,这么多个串中字典序最大的那一个. 某人捡到了这个问题,并把它扔给了你. [输入] 一 ...
- bzoj 1914: [Usaco2010 OPen]Triangle Counting 数三角形——极角排序
Description 在一只大灰狼偷偷潜入Farmer Don的牛群被群牛发现后,贝西现在不得不履行着她站岗的职责.从她的守卫塔向下瞭望简直就是一件烦透了的事情.她决定做一些开发智力的小练习,防止她 ...