0

Djangoの標準コメントシステムを使用していますが、スパム対策ハニーポット機能を拡張したいと思います。

フィールドのデフォルトの「name」と「id」を、「website」などのスパムボットにとってより魅力的なものに変更することを考えました。私は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が正常に変更されますが、メカニズム全体が機能しなくなります。この非表示フィールドにデータを入力して送信し、コメントを追加しましたnameid

他にもいくつかアイデアがありますが、最初にこれを機能させたいと思います。デフォルトのハニーポットを変更して、正常に機能させることは可能nameですidか?

PSこれを行うためのより効率的な方法は、実際のdjangoコードで作業する代わりに、django.contrib.commentsを拡張し、そこで変更をコーディングすることだと思います-これを達成するための最良の方法は何でしょうか?

4

1 に答える 1

0

いじくり回す時間がもう少しあれば、両方の質問に対する答えが見つかりました。

標準のハニーポットを変更したり、独自のハニーポットを作成したりするには、関数と変数CommentFormを追加してクラスを拡張する必要があります。どちらも標準のものに似ています。また、関数をオーバーライドして、名前を含める必要があります。辞書の新しい/変更されたハニーポット。clean_NAME_OF_HONEYPOTNAME_OF_HONEYPOTsecurity_errors

これを行う最善の方法は、 https ://docs.djangoproject.com/en/dev/ref/contrib/comments/custom/ で説明されているようにカスタム コメント アプリを作成することです。

この回答が私の状況で他の誰かに役立つことを願っています。

于 2013-01-08T23:21:08.927 に答える