gpt4 book ai didi

django - 如何记录所有 Django 表单验证错误?

转载 作者:行者123 更新时间:2023-12-04 20:44:09 24 4
gpt4 key购买 nike

在我的 Django 应用程序中,我有一个 forms.py 文件,我在其中定义了与表单输入屏幕相对应的类负载。这些类中的每一个都在该属性/字段特定的 _clean() 函数或表单类的整体 clean() 函数中进行一些验证。如果在这些 clean() 函数中的任何一个中验证失败,我会引发如下错误:

raise forms.ValidationError('Invalid value dude!!')                

当出现此类错误时,应用程序会捕获该错误并将其显示在表单上供用户使用。

我还在这个文件的顶部定义了一个记录器,如下所示:
import logging
logger = logging.getLogger(__name__)

现在,除了向用户报告 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))

然后使用日志混合定义你的表单:
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 中什么也不做。

关于django - 如何记录所有 Django 表单验证错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20833638/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com