在我的Django应用程序中,我有一个forms.py文件,在其中我定义了与表单输入屏幕相对应的类的加载。这些类中的每一个都在特定于属性/字段的_clean()函数或表单类的整个clean()函数中进行一些验证。如果在任何这些clean()函数中验证失败,我会引发如下错误:
raise forms.ValidationError('Invalid value dude!!')
当出现此类错误时,应用程序会捕获错误并将其显示在用户的表单上。
我还在这个文件的顶部定义了一个记录器,如下所示:
import logging
logger = logging.getLogger(__name__)
现在,除了向用户报告ValidationErrors之外,我还想捕获它们并将它们记录为错误。是否有一些通用而优雅的方法我可以让记录器记录所有这些错误,而不会改变影响应用程序用户的任何其他行为?
答案 0 :(得分:2)
您可以扩展Forms
以在验证结束后立即记录错误:
class LoggingMixin(object):
def full_clean(self):
super(LoggingMixin, self).full_clean()
for field, errors in self.errors.iteritems():
logger.info('Form error in %s: %s', ', '.join(errors))
然后使用logging mixin:
定义表单class MyForm(LoggingMixin, forms.Form):
...
当Django 1.7出局时,您还可以在引发异常消息时捕获它们。这将为您提供原始异常(Form
进行更多检查):
class LoggingMixin(object):
def add_error(self, field, error):
if field:
logger.info('Form error on field %s: %s', field, error)
else:
logger.info('Form error: %s', error)
super(LoggingMixin, self).add_error(field, error)
警告:使用add_error
将无法在Django< = 1.6中执行任何操作。