Frage

Ich möchte eine Captcha-Validierung machen.

ich den Schlüssel aus dem recaptcha Website und bereits erfolgreich mit dem öffentlichen Schlüssel setzt die Webseite mit der Herausforderung zu laden .

<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>

ich herunterladen der reCaptcha Python-Plugin aber ich kann keine Dokumentation finden, wie man benutze es.

Hat jemand eine Idee, wie diese Python-Plugin zu benutzen? recaptcha-client-1.0.4.tar.gz (md5)

War es hilfreich?

Lösung

Es ist ganz einfach. Dies ist ein Beispiel von einer trivialen trac-Plugin verwende ich:

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

Andere Tipps

Es tut uns Leid zu sagen, aber dieses Modul, während es ganz gut funktioniert, ist fast völlig ohne Papiere, und es ist das Layout ein bisschen ist für die von uns zu verwirren, die mit bevorzugen „>> Hilfe (Modulname)“ nach der Installation. Ich werde ein Beispiel unter Verwendung von cherrypy geben, und einige cgi-bezogene Kommentare danach machen.

captcha.py enthält zwei Funktionen und eine Klasse:

  • display_html: die die bekannte "reCaptcha box"

  • zurück
  • einreichen: welche die Werte trägt durch den Benutzer in den Hintergrund getreten

  • RecapchaResponse: die eine Container-Klasse ist, die die Antwort von reCaptcha

  • enthält

Sie werden zuerst den vollständigen Pfad importieren müssen capcha.py, dann erstellen Sie ein paar Funktionen, die mit der Antwort Griff anzuzeigen und zu tun haben.

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)

Es wird so ziemlich das gleiche sein, wenn cgi verwendet, nur die Variable REMOTE_ADDR Umgebung verwenden, wo ich cherrypy den request.headers verwendet und Feldspeicher verwenden, um Ihre Kontrollen zu tun.

Es gibt keine Magie, folgt das Modul nur die Dokumentation: https://developers.google.com/recaptcha/docs/display

Validierungsfehler Sie können behandeln müssen: https://developers.google.com/recaptcha/docs/verify

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top