python为tornado添加recaptcha验证码功能
时间:2023-04-26 19:57:12
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
jb51.net<!DOCTYPE html>
jb51.net<html>
jb51.net<head>
jb51.netjb51.net<title>reCaptcha验证码</title>
jb51.net</head>
jb51.net<body>
jb51.netjb51.net<form action="" method="post">
jb51.netjb51.net<script type="text/javascript" src="http://www.google.com/recaptcha/api/challenge?k={{ publickey }}"></script>
jb51.netjb51.net<noscript>
jb51.netjb51.netjb51.net<iframe src="http://www.google.com/recaptcha/api/noscript?k={{ publickey }}" height="300" width="500" frameborder="0"></iframe><br>
jb51.netjb51.netjb51.net<textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea>
jb51.netjb51.netjb51.net<input type="hidden" name="recaptcha_response_field" value="manual_challenge">
jb51.netjb51.net</noscript>
jb51.netjb51.net</form>
jb51.net</body>
jb51.net</html>
标签:python,tornado,recaptcha,验证码
0
投稿
猜你喜欢
初学js者对javascript面向对象的认识分析
2011-03-16 11:04:00
浅析Go语言编程当中映射和方法的基本使用
2024-04-28 09:13:16
python脚本开机自启的实现方法
2023-10-04 17:07:15
Python最基本的数据类型以及对元组的介绍
2022-03-26 07:04:07
java常用正则表达式
2023-04-24 11:38:36
在Python中使用itertools模块中的组合函数的教程
2023-11-06 16:31:36
Python用类实现扑克牌发牌的示例代码
2021-01-07 10:07:07
vue通知提醒消息举例详解
2024-05-10 14:17:03
什么是XSLT,什么是XPath
2008-01-21 13:12:00
Qzoneing主题视觉设计分享
2009-07-21 18:12:00
Java面试题冲刺第十二天--数据库(2)
2024-01-21 18:34:27
浏览器用户体验:Firefox初体验 VS The world
2008-08-02 11:58:00
通过实例解析python subprocess模块原理及用法
2022-03-26 06:21:51
js简单的分页器插件代码实例
2024-04-29 13:23:22
pytorch使用horovod多gpu训练的实现
2022-01-07 16:01:18
Sql server中的char、varchar、text和nchar、nvarchar、ntext的区别
2011-08-14 09:43:44
Flask和Django框架中自定义模型类的表名、父类相关问题分析
2022-04-04 00:23:17
python批量解压zip文件的方法
2022-08-26 16:20:00
python查找特定名称文件并按序号、文件名分行打印输出的方法
2023-11-27 03:35:35
详解Python小数据池和代码块缓存机制
2023-02-07 06:54:28