Wie man Python-Plugin ReCaptcha Client für die Validierung verwenden?
-
10-07-2019 - |
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)
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