Saq*_*Ali 5 django django-forms
在我的Django应用程序中,我有一个forms.py文件,在其中定义了与表单输入屏幕相对应的类的负载。这些类中的每一个都在特定于属性/字段的_clean()函数或表单类的总体clean()函数中进行一些验证。如果在这些clean()函数中的任何一个函数中验证均失败,则会引发如下错误:
raise forms.ValidationError('Invalid value dude!!')
Run Code Online (Sandbox Code Playgroud)
出现此类错误时,应用程序会捕获该错误并将其显示在表单上,以供用户使用。
我还在此文件的顶部定义了一个记录器,如下所示:
import logging
logger = logging.getLogger(__name__)
Run Code Online (Sandbox Code Playgroud)
现在,除了向用户报告ValidationErrors外,我还想捕获它们并将它们记录为错误。是否可以通过某种通用且优雅的方法来使记录器记录所有此类错误,而无需更改影响应用程序用户的任何其他行为?
您可以扩展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))
Run Code Online (Sandbox Code Playgroud)
然后使用日志混合定义您的表单:
class MyForm(LoggingMixin, forms.Form):
...
Run Code Online (Sandbox Code Playgroud)
当 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)
Run Code Online (Sandbox Code Playgroud)
警告:add_error在 Django <= 1.6 中使用不会执行任何操作。
| 归档时间: |
|
| 查看次数: |
1289 次 |
| 最近记录: |