2010-10-05 6 views
1

J'essaie de comprendre comment il est possible d'utiliser http://code.google.com/p/django-simple-captcha/ avec des commentaires django. Je l'ai fait tout comme décrit ici: http://docs.djangoproject.com/en/dev/ref/contrib/comments/custom/django: Ajout de captcha simple aux commentaires django

Alors mes formes dans l'application de commentaire personnalisé ressemble à ceci:

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 

Et mon dossier __init__.py:

from protected_comments.forms import CommentFormWithCaptcha 

def get_form(): 
    return CommentFormWithCaptcha 

Le champ captcha est rendu, mais je ne comprends pas comment vérifier si l'entrée était valide. Par exemple. docs simple-captcha dit suivants

if form.is_valid(): 
      human = True 

Mais je ne comprends pas vraiment où je peux ajouter ceci. Y a-t-il une méthode dans forms.py que je peux remplacer?

Répondre

2

Je vais supposer que vous avez ajouté correctement votre protected_comments application à votre fichier settings.py comme spécifié dans la documentation:

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

COMMENTS_APP = 'protected_comments' 

Maintenant, lorsque vous affichez votre formulaire de commentaire, il va placer une URL par défaut indiquant au formulaire où il va POST. Vous pouvez voir le contrib.comments URLconf par défaut here.

Cette vue par défaut pour gérer le commentaire posté passe déjà par vos champs, personnalisés ou non, et s'assure qu'ils sont valides. Vous souhaitez ne devez ajouter:

if form.is_valid(): 
    human = True 

si cela était une application personnalisée que vous ajoutiez le captcha, qui n'avait pas déjà des fonctions d'affichage écrites pour vous comme contrib.comments fait.

Donc, vous allez bien, le captcha va se valider avec ce que vous avez déjà écrit. Je viens de le tester sur un projet de démonstration pour confirmer.

+0

Désolé n'a pas complètement compris où l'ajouter? Dois-je copier quelque part la vue des commentaires par défaut et ajouter human = True quelque part? –

+0

En fait, il affiche une erreur capcha –

+0

@Oleg Non, vous ne devez pas l'ajouter n'importe où, ou copier quoi que ce soit. 'django.contrib.comments' vérifie si le formulaire est valide, donc vous n'avez pas besoin de le faire. Ce 'human = True' ne fait réellement rien, c'est juste une ligne d'espace réservé dans la documentation pour vous montrer que vous devez vérifier si le formulaire est valide. Mais puisque l'application de commentaires vérifie déjà cela, vous allez bien. Le captcha devrait travailler pour vous maintenant. – Pewpewarrows

0

Si vous essayez d'implémenter ceci juste pour le plaisir. Alors désolé, je n'ai pas de solution à votre problème & pas besoin de lire plus loin.

Sinon, je suggère d'utiliser Disqus à la place. Cela vous épargnerait une tonne de temps plus des maux de tête d'entretien plus tard. Essayez Django-Disqus.

Il y avait aussi un blog post de Daniel Roseman pourquoi il déplacé vers Disqus

Questions connexes