2013-01-06 4 views
0

저는 장고의 표준 코멘트 시스템을 사용하고 있습니다. 스팸 방지 허니팟 기능을 확장하고 싶습니다.Django.contrib.comments 허니팟 사용자 정의

필드의 기본 "이름"과 "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 

그리고이 성공적으로 장고에 의해 생성 된 HTML에 nameid을 변경하지만 다음 전체 메커니즘이 작동을 멈 춥니 다 -이 보이지 않는 필드를 제출하고 의견을 채우는 시도 가 추가되었습니다.

나는 몇 가지 다른 아이디어를 가지고 있지만 우선이 기능을 얻고 싶습니다. 기본 허니팟 nameid을 수정하고 가능한대로 작동시켜야합니까?

P. 나는 실제 장고 코드 대신 django.contrib.comments를 확장하고 거기에 수정 코드를 작성하는 것이 더 훌륭한 방법이라고 믿습니다.이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 내 질문에 모두 답을 찾을 주위에 수리를 위해 조금 더 많은 시간이 주어

답변

0

: 표준 허니팟을 수정하거나 자신을 만들기 위해

을, 당신은 clean_NAME_OF_HONEYPOT을 추가하여 CommentForm 클래스를 확장해야 함수뿐만 아니라 NAME_OF_HONEYPOT 변수는 표준 변수와 비슷하게 보이며 새로 입력/수정 된 허니팟의 이름을 사전에 포함하려면 security_errors 함수를 재정의해야합니다.

여기에 설명 된대로 사용자 정의 메모 앱을 만들려면 가장 좋은 방법은 https://docs.djangoproject.com/en/dev/ref/contrib/comments/custom/입니다.

이 답변으로 내 상황에있는 다른 사람들에게 도움이되기를 바랍니다.