如何正确处理live django网站上的错误?

时间:2013-09-19 18:43:24

标签: python django

假设我有一个尝试并且有一个例外......在实时制作(django)网站上处理这些异常/错误的正确方法是什么?

所以我有

try:
    create_response = wepay.call('/account/create',
                                 {'name': name, 'description': desc})
    self.wepay_account_id = create_response['account_id']
    self.save()
except WePay.WePayError as e:
    ..... (what do I put here?

3 个答案:

答案 0 :(得分:2)

您可以通过Django设置电子邮件错误报告:https://docs.djangoproject.com/en/dev/howto/error-reporting/

或者您可以使用Rollbar之类的服务(拥有免费帐户)来跟踪错误发生情况。

或者您可以使用自托管的Greylog(如评论中建议的那样),这里是django的一个很好的指南:http://www.caktusgroup.com/blog/2013/09/18/central-logging-django-graylog2-and-graypy/

答案 1 :(得分:1)

回复(可选地重定向到)向用户解释问题的适当页面,如果可能,提供解决方案。在生产中为您的用户提供500是您想要避免的,因此捕获异常是一个好主意。

所以:

except WePay.WePayError as e:
    return render_to_response('wepay_error_page.html')

或:

except WePay.WePayError as e:
    return HttpResponseRedirect('/errors/wepay/')  # Note: better use urlresolvers

(请注意,此特定代码仅在视图中有效)

然后(可选),确保您获得错误的副本,例如向您发送电子邮件。

对这个特殊情况的建议(如果我成功解释代码)可能是通知自己,并通过向用户解释他们的付款出错的页面来回复。告诉他们这可能是因为他们的行为(可能他们取消了他们的付款),并提供用户认为这不是他们的错误的联系方式。

Django默认邮件(正确配置邮件时)所有500个错误到settings.ADMINS,但这些只发生在未捕获例外,所以在这个特定的问题服务,如Rollbar或中央日志记录解决方案仅在您重新引发异常(将导致500)或在catch块中手动将错误发送到其中一个时才会起作用。

答案 2 :(得分:0)

我建议将以上解决方案重定向到解释WePay错误的页面,并结合使用pypi上提供的django-wepay应用程序,其中包含所有错误的记录,以及可选的所有调用。