2009-09-17 6 views
15

Je veux faire une validation captcha.Comment utiliser le plugin Python reCaptcha client pour la validation?

Je reçois la clé du recaptcha website et réussis déjà à mettre la clé publique pour charger la page Web avec le défi.

<script type="text/javascript" 
    src="http://api.recaptcha.net/challenge?k=<your_public_key>"> 
</script> 

<noscript> 
    <iframe src="http://api.recaptcha.net/noscript?k=<your_public_key>" 
     height="300" width="500" frameborder="0"></iframe><br> 
    <textarea name="recaptcha_challenge_field" rows="3" cols="40"> 
    </textarea> 
    <input type="hidden" name="recaptcha_response_field" 
     value="manual_challenge"> 
</noscript> 

Je télécharger the reCaptcha Python plugin mais je ne peux trouver aucune documentation sur la façon de l'utiliser.

Quelqu'un a-t-il une idée sur la façon d'utiliser ce plugin Python? recaptcha-client-1.0.4.tar.gz (md5)

Répondre

25

C'est assez simple. Voici un exemple d'un plugin trac trivial J'utilise:

from recaptcha.client import captcha 

if req.method == 'POST': 
    response = captcha.submit(
     req.args['recaptcha_challenge_field'], 
     req.args['recaptcha_response_field'], 
     self.private_key, 
     req.remote_addr, 
     ) 
    if not response.is_valid: 
     say_captcha_is_invalid() 
    else: 
     do_something_useful() 
else: 
    data['recaptcha_javascript'] = captcha.displayhtml(self.public_key) 
    data['recaptcha_theme'] = self.theme 
    return 'recaptchaticket.html', data, n 
+0

Salut abbé, Je suis nouveau à Python, pouvez-vous expliquer comment utiliser le paquet téléchargé en plus de détails? –

+2

Vous devez l'installer en tant que paquet python standard. Je vous recommande de lire un cours d'introduction sur python si vous êtes nouveau à toutes ces choses. Vous pouvez essayer http://diveintopython.org/toc/index.html ou http://docs.python.org/tutorial/index.html comme un bon point de départ. – abbot

4

Désolé de le dire, mais ce module, alors qu'il fonctionne très bien, est presque entièrement sans papier, et il est la mise en page est un peu déroutant pour les d'entre nous qui préfèrent utiliser ">> help (modulename)" après l'installation. Je vais donner un exemple en utilisant cherrypy, et faire quelques commentaires liés à cgi après.

captcha.py contient deux fonctions et une classe:

  • display_html: qui retourne le familier « boîte reCaptcha »

  • soumettre: qui soumet les valeurs saisies par l'utilisateur dans l'arrière-plan

  • RecapchaResponse: qui est une classe de conteneur qui contient la réponse de reCaptcha

Vous devez d'abord importer le chemin d'accès complet vers capcha.py, puis créer quelques fonctions gérant l'affichage et le traitement de la réponse.

from recaptcha.client import captcha 
class Main(object): 

    @cherrypy.expose 
    def display_recaptcha(self, *args, **kwargs): 
     public = "public_key_string_you_got_from_recaptcha" 
     captcha_html = captcha.displayhtml(
          public, 
          use_ssl=False, 
          error="Something broke!") 

     # You'll probably want to add error message handling here if you 
     # have been redirected from a failed attempt 
     return """ 
     <form action="validate"> 
     %s 
     <input type=submit value="Submit Captcha Text" \> 
     </form> 
     """%captcha_html 

    # send the recaptcha fields for validation 
    @cherrypy.expose 
    def validate(self, *args, **kwargs): 
     # these should be here, in the real world, you'd display a nice error 
     # then redirect the user to something useful 

     if not "recaptcha_challenge_field" in kwargs: 
      return "no recaptcha_challenge_field" 

     if not "recaptcha_response_field" in kwargs: 
      return "no recaptcha_response_field" 

     recaptcha_challenge_field = kwargs["recaptcha_challenge_field"] 
     recaptcha_response_field = kwargs["recaptcha_response_field"] 

     # response is just the RecaptchaResponse container class. You'll need 
     # to check is_valid and error_code 
     response = captcha.submit(
      recaptcha_challenge_field, 
      recaptcha_response_field, 
      "private_key_string_you_got_from_recaptcha", 
      cherrypy.request.headers["Remote-Addr"],) 

     if response.is_valid: 
      #redirect to where ever we want to go on success 
      raise cherrypy.HTTPRedirect("success_page") 

     if response.error_code: 
      # this tacks on the error to the redirect, so you can let the 
      # user knowwhy their submission failed (not handled above, 
      # but you are smart :-)) 
      raise cherrypy.HTTPRedirect(
       "display_recaptcha?error=%s"%response.error_code) 

Ce sera à peu près le même en cas d'utilisation cgi, il suffit d'utiliser la variable d'environnement REMOTE_ADDR où je request.headers de cherrypy et de l'utilisation de stockage terrain pour faire vos chèques.

Il n'y a pas de magie, le module se contente de suivre les docs: https://developers.google.com/recaptcha/docs/display

erreurs de validation que vous pourriez avoir besoin pour gérer: https://developers.google.com/recaptcha/docs/verify

Questions connexes