我如何包括一个堆栈跟踪在我Django500.html 页面?
-
02-07-2019 - |
题
我跑 Django 1.0
和我靠近部署我的应用程序。因此,我将改变调试设置错误的。
这样说,我仍然喜欢到包括堆栈跟踪我500.html 页面的错误时有发生。通过这样做,用户可以复制和粘贴的错误和容易地通过电子邮件发送给开发商。
任何思考如何最好地处理这个问题?
解决方案
自动记录你的500多,这种方式:
- 你知道他们什么时候会发生。
- 你不需要依靠用户发送你栈跟踪.
乔尔建议甚至迄今为止为将自动创造票在你的错误跟踪器的时候你的应用程序的经验失败的。就个人而言,我创建一个(私人)RSS与栈跟踪,网址,等等。那个开发商可以订阅。
表示堆的痕迹到你的用户,另一方面可能的泄漏信息的恶意用户可以用来攻击你的网站。过于详细的错误消息的一个经典的垫脚石SQL注射攻击。
编辑 (加代码样捕捉回溯):
你可以得到的异常的信息sys.exc_info的呼吁。在格式化的回溯显示来自回溯模块:
import traceback
import sys
try:
raise Exception("Message")
except:
type, value, tb = sys.exc_info()
print >> sys.stderr, type.__name__, ":", value
print >> sys.stderr, '\n'.join(traceback.format_tb(tb))
打印:
Exception : Message
File "exception.py", line 5, in <module>
raise Exception("Message")
其他提示
正如@zacherates所说,你真的不想向你的用户显示堆栈跟踪。解决此问题的最简单方法是Django默认情况下,如果你自己和你的开发人员在ADMINS设置中列出了电子邮件地址;每当DEBUG = False出现500错误时,它会向该列表中的每个人发送一封电子邮件,其中包含完整的堆栈跟踪(以及更多)。
如果我们想在你的模板(500.html)上显示生成的异常,那么我们可以编写你自己的500视图,抓住异常并将其传递给你的500模板。
步骤:
#在views.py中:
import sys,traceback
def custom_500(request):
t = loader.get_template('500.html')
print sys.exc_info()
type, value, tb = sys.exc_info()
return HttpResponseServerError(t.render(Context({
'exception_value': value,
'value':type,
'tb':traceback.format_exception(type, value, tb)
},RequestContext(request))))
#在Main urls.py中:
from django.conf.urls.defaults import *
handler500 = 'project.web.services.views.custom_500'
#在模板(500.html)中:
{{ exception_value }}{{value}}{{tb}}
更多关于它: https://docs.djangoproject.com/en/dev/topics/http/views/#the-500-server-error-view
您可以在自定义异常处理程序中调用 sys.exc_info()
。但我不建议这样做。 Django可以向您发送例外电子邮件。
不隶属于 StackOverflow