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 ...
随机推荐
- POJ2074:Line of Sight——题解
http://poj.org/problem?id=2074 题目大意:(下面的线段都与x轴平行)给两条线段,一个点在其中一条线段看另一条线段,但是中间有很多线段阻挡视线.求在线段上最大连续区间使得在 ...
- BZOJ1856:[SCOI2010]字符串——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=1856 lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还 ...
- BZOJ2434:[NOI2011]阿狸的打字机——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=2434 https://www.luogu.org/problemnew/show/P2414 打字 ...
- BZOJ1833:[ZJOI2010]数字计数——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1833 https://www.luogu.org/problemnew/show/P2602 给定两 ...
- BZOJ1834 [ZJOI2010]network 网络扩容 【最大流,费用流】
1834: [ZJOI2010]network 网络扩容 Time Limit: 3 Sec Memory Limit: 64 MB Submit: 3394 Solved: 1774 [Subm ...
- BZOJ1034 [ZJOI2008]泡泡堂BNB 【贪心】
1034: [ZJOI2008]泡泡堂BNB Time Limit: 10 Sec Memory Limit: 162 MB Submit: 3531 Solved: 1798 [Submit][ ...
- Nginx配置解析
#运行用户,默认即是nginx,可不设置 #user nobody; #nginx进程,一般设置为和cpu核数一样 worker_processes 1; #;单个后台worker process进程 ...
- HDU2444 :The Accomodation of Students(二分图染色+二分图匹配)
The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...
- HDU2686 费用流 模板
Matrix Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- 第01篇 说一下Setting,我一直没有讲过
settings 调整 settings 中的设置是非常关键的,它们会改变 MyBatis 的运行时行为.下表描述了设置中各项的意图.默认值等. 设置参数 描述 有效值 默认值 cacheEn ...