Posted in Python onFebruary 26, 2014
from urllib.request import urlopen from urllib.parse import urlencode import tornado.httpserver import tornado.ioloop import tornado.web #获取key: https://www.google.com/recaptcha/whyrecaptcha publickey = '填入你的 public key' privatekey = '填入你的 private key' class Application(tornado.web.Application): def __init__(self): handlers = [ (r'/', IndexHandler) ] settings = dict( template_path="templates", ) tornado.web.Application.__init__(self, handlers, **settings) class IndexHandler(tornado.web.RequestHandler): def get(self): self.render('index.html', publickey=publickey) def post(self): url = 'http://www.google.com/recaptcha/api/verify' #验证码 challenge = self.get_argument('recaptcha_challenge_field') #用户输入 response = self.get_argument('recaptcha_response_field') data = { 'privatekey': privatekey, 'remoteip': self.request.remote_ip, 'challenge': challenge, 'response': response } res = urlopen(url, data=urlencode(data).encode()) #获取验证结果,这里直接将返回结果输出到页面 self.write(res.read().decode()) if __name__ == '__main__': server = tornado.httpserver.HTTPServer(Application()) server.listen(10001) tornado.ioloop.IOLoop.instance().start()
templates/index.html
3water.com<!DOCTYPE html> 3water.com<html> 3water.com<head> 3water.com3water.com<title>reCaptcha验证码</title> 3water.com</head> 3water.com<body> 3water.com3water.com<form action="" method="post"> 3water.com3water.com<script type="text/javascript" src="http://www.google.com/recaptcha/api/challenge?k={{ publickey }}"></script> 3water.com3water.com<noscript> 3water.com3water.com3water.com<iframe src="http://www.google.com/recaptcha/api/noscript?k={{ publickey }}" height="300" width="500" frameborder="0"></iframe><br> 3water.com3water.com3water.com<textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea> 3water.com3water.com3water.com<input type="hidden" name="recaptcha_response_field" value="manual_challenge"> 3water.com3water.com</noscript> 3water.com3water.com</form> 3water.com</body> 3water.com</html>
python为tornado添加recaptcha验证码功能
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@