tho*_*mad 4 python django warnings
我想向旧的基于函数的视图添加警告,提醒用户我们正在转向基于类的视图。我一直在 Django 中看到这些警告,例如RemovedInDjango19Warning. 这个真的很酷。
def old_view(request, *args, **kwargs):
print('I can see this message in my terminal output!')
warnings.warn("But not this message.", DeprecationWarning, stacklevel=2)
view = NewClassBasedView.as_view()
return view(request, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
我print在终端输出中看到了语句,但没有看到警告本身。我在终端中收到来自 Django 的其他警告(如上述RemovedInDjango19Warning但不是这个。
我错过了什么吗?我是否必须在导入特定级别以某种方式打开警告(即使它广泛适用于 Django)?
假设您使用的是 Django 1.8 并且您没有 Logging 配置,您可以从Django 文档中阅读:
Django 使用 Python 的内置日志模块来执行系统日志记录。Python 自己的文档中详细讨论了该模块的用法。
所以你可以这样做:
# import the logging library
import logging
# Get an instance of a logger
logger = logging.getLogger(__name__)
def my_view(request, arg1, arg):
...
if bad_mojo:
# Log an error message
logger.error('Something went wrong!')
Run Code Online (Sandbox Code Playgroud)
logging 模块非常有用,功能太多,建议你看一下Python logging 文档,例如你可以这样做:
FORMAT = '%(asctime)-15s %(clientip)s %(user)-8s %(message)s'
logging.basicConfig(format=FORMAT)
d = {'clientip': '192.168.0.1', 'user': 'fbloggs'}
logger = logging.getLogger('tcpserver')
logger.warning('Protocol problem: %s', 'connection reset', extra=d)
Run Code Online (Sandbox Code Playgroud)
输出到:
2006-02-08 22:20:02,165 192.168.0.1 fbloggs 协议问题:连接重置
格式化您的所有消息并向您的用户发送非常棒的消息。
如果您想使用警告模块,您必须知道默认情况下 Python 不会显示应用程序上引发的所有警告。有两种方法可以改变这种行为:
通过参数:你必须用-Wd参数调用python来加载默认过滤器,这样你才能python -Wd manage.py runserver调用测试服务器。
按程序:您只需要调用一次该warnings.simplefilter('default')函数。你可以从任何地方调用这个函数,但你必须确保在任何调用之前执行这一行warnings.warn,在我的测试中,我将它放在settings.py文件的开头,但我不确定那是最好的地方。__init__.py项目包的文件将是一个不错的地方。
| 归档时间: |
|
| 查看次数: |
3196 次 |
| 最近记录: |