Django中的详细弃用警告

时间:2013-05-05 22:01:11

标签: python django warnings django-1.5 deprecation-warning

从django 1.3升级到django 1.5后,我在测试运行期间开始看到这些DeprecationWarnings

  

path_to_virtualenv / LIB / python2.6的/站点包/ django的/ HTTP / request.py:193:   DeprecationWarning:HttpRequest.raw_post_data已被弃用。使用   相反,HttpRequest.body。

我在项目内搜索了raw_post_data但没有发现任何内容。所以它没有直接用在项目中。然后,我手动浏览INSTALLED_APPS,发现raven模块仍然使用raw_post_data,这是原因,但是..

在测试运行期间是否可以查看DeprecationWarning的原因?如何使这些警告更加冗长?

2 个答案:

答案 0 :(得分:24)

您可以通过命令行选项-W设置Python warning control以在 DeprecationWarning 上使用追溯引发异常,例如错误而不是正常的简单警告一次。任何特定警告都可以按消息,类别,模块,行或它们的组合进行过滤。

示例:

python -W error:"raw_post_data has been deprecated" manage.py test

python -W error::DeprecationWarning manage.py test

python -W error:::django.http.request manage.py test

如果您想通过在大项目的许多文件中批量编辑来修复一种类型的所有警告,那么精细过滤非常有用。


Python 2.7 及更高版本通常会忽略DeprecationWarning,如果它们没有被重新安装,例如通过-Wd选项或环境变量export PYTHONWARNINGS="d"。这对开发机器很有用,但对生产却没有用。

答案 1 :(得分:5)

这取自a similar question

您可以使用警告模块引发DeprecationWarning的错误。

暂时将以下代码段添加到项目urls.py的顶部:

import warnings
warnings.simplefilter('error', DeprecationWarning)

DeprecationWarning现在会引发错误,因此如果debug=True您将获得熟悉的黄色Django错误页面以及完整的回溯。