django: добавление простой капчи к комментариям django - PullRequest
1 голос
/ 05 октября 2010

Я пытаюсь понять, как можно использовать http://code.google.com/p/django-simple-captcha/ с комментариями django. Я сделал все, как описано здесь: http://docs.djangoproject.com/en/dev/ref/contrib/comments/custom/

Итак, мои формы в приложении пользовательских комментариев выглядят так:

from django import forms
from django.contrib.comments.forms import CommentForm
from captcha.fields import CaptchaField


class CommentFormWithCaptcha(CommentForm):
    captcha = CaptchaField()

    def get_comment_model(self):
        # Use our custom comment model instead of the built-in one.
        return Comment

И мой __init__.py файл:

from protected_comments.forms import CommentFormWithCaptcha

def get_form():
    return  CommentFormWithCaptcha

Поле капчи отображается, но я не понимаю, как проверить, был ли ввод действительным. Например. Документы, написанные на простом коде, следующие

if form.is_valid():
            human = True

Но я не совсем понимаю, где я могу добавить это. Есть ли в form.py метод, который я могу переопределить?

Ответы [ 2 ]

2 голосов
/ 05 октября 2010

Я предполагаю, что вы правильно добавили ваше приложение protected_comments в файл settings.py, как указано в документации:

INSTALLED_APPS = [
    ...
    'protected_comments',
    ...
]

COMMENTS_APP = 'protected_comments'

Теперь, когда вы предоставляете форму комментария, она будет размещать URL-адрес по умолчанию, сообщающий форме, куда она будет отправлять POST. Вы можете увидеть contrib.comments URL-адрес по умолчанию здесь .

Это представление по умолчанию для обработки опубликованного комментария уже проходит через ваши поля, пользовательские или нет, и гарантирует, что они действительны. Вам нужно всего лишь добавить:

if form.is_valid():
    human = True

если бы это было пользовательское приложение, в которое вы добавляли капчу, у которого еще не было написано для вас функций просмотра, как contrib.comments.

Итак, все в порядке, капча будет подтверждена тем, что вы уже написали. Я только что проверил это на демонстрационном проекте, чтобы подтвердить.

0 голосов
/ 05 октября 2010

Если вы пытаетесь реализовать это просто для удовольствия.Тогда извините, у меня нет решения вашей проблемы и нет необходимости читать дальше.

В противном случае я бы предложил вместо этого использовать Disqus.Это сэкономит вам кучу времени и сэкономит время на обслуживании.Попробуйте Django-Disqus .

Также было сообщение в блоге от Даниэль Розман о том, почему он перешел на Disqus

...