我想向一个旧的基于函数的视图添加一个警告,警告用户我们正在转向基于类的视图。我在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)
我在终端输出中看到print
语句,但没有看到警告本身。我在终端上收到Django的其他警告(如前面提到的RemovedInDjango19Warning
,但不是这个。
我错过了什么吗?我是否必须在某个特定的导入级别上发出警告(即使它对Django有广泛的作用)?
答案 0 :(得分:4)
假设您使用的是Django 1.8并且没有日志记录配置,可以阅读Django documentation:
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!')
日志记录模块非常有用且功能太多,我建议你看一下Python logging documentation,你可以这样做:
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)
输出到:
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
文件将是一个不错的地方。