0

我正在使用 Django 的标准评论系统,我想扩展它的反垃圾邮件蜜罐功能。

我想将字段的默认“名称”和“ID”更改为对垃圾邮件机器人更有吸引力的东西,例如“网站”。我检查了html,它看起来像这样:

 <p style="display:none;">
    <label for="id_honeypot">Never send a human to do a machine's job</label>
    <input type="text" name="honeypot" id="id_honeypot" />
  </p>

我认为更改此元素的默认值会增强其反垃圾邮件功能是否正确?我尝试django/contrib/comments/forms.py像这样修改它:

class CommentForm(CommentDetailsForm):
    #use to be honeypot = forms.CharField(...
    website      = forms.CharField(required=False,
                                label=_('Never send a human to do a machines job')

def clean_honeypot(self):
    """Check that nothing's been entered into the honeypot."""
    value = self.cleaned_data["website"]
    if value:
        raise forms.ValidationError(self.fields["website"].label)
    return value

这成功地改变了django 生成的 html 中的nameand id,但是整个机制停止工作 - 我尝试填充这个不可见的字段,提交并添加了评论。

我也有其他一些想法,但首先我真的很想让这个工作 - 是否可以修改默认蜜罐nameid让它像它应该的那样工作?

PS我相信这样做更优雅的方法是扩展 django.contrib.comments 并在那里编写修改代码,而不是处理实际的 django 代码——实现这一点的最佳方法是什么?

4

1 回答 1

0

给我更多的时间来修补,我找到了我两个问题的答案:

为了修改标准蜜罐或创建自己的蜜罐,您必须CommentForm通过添加一个clean_NAME_OF_HONEYPOT函数和一个NAME_OF_HONEYPOT变量来扩展该类,这两者看起来都类似于标准蜜罐,您还必须覆盖该security_errors函数以包含您在字典中的新/修改蜜罐。

The best way to do this is to create your custom comments app as described here: https://docs.djangoproject.com/en/dev/ref/contrib/comments/custom/ .

I hope this answer helps anyone else in my situation.

于 2013-01-08T23:21:08.927 回答