Question

Je souhaite effectuer une validation captcha.

J'obtiens la clé du site Web recaptcha et j'ai déjà réussi à 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écharge le plug-in reCaptcha Python , mais je ne trouve aucune documentation sur la procédure à suivre. utilise le.

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

Était-ce utile?

La solution

C'est assez simple. Voici un exemple tiré d'un plugin trivial que 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

Autres conseils

Désolé de le dire, mais ce module fonctionne, mais il est presque totalement non documenté et sa présentation est un peu déroutante pour ceux d'entre nous qui préfèrent utiliser " > > aide (nom du module) " après l'installation. Je vais donner un exemple en utilisant cherrypy, puis quelques commentaires sur cgi.

captcha.py contient deux fonctions et une classe:

  • display_html: qui retourne la célèbre "reCaptcha box"

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

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

Vous devez d'abord importer le chemin complet dans capcha.py, puis créer quelques fonctions qui gèrent 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 pareil si vous utilisez cgi, utilisez simplement la variable d’environnement REMOTE_ADDR où j’ai utilisé request.headers de cherrypy et j’utilise le stockage de champ pour effectuer vos vérifications.

Il n’ya pas de magie, le module ne fait que suivre la documentation: https://developers.google.com/recaptcha/docs/display

Erreurs de validation que vous devrez peut-être gérer: https://developers.google.com/recaptcha/docs/verify

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top