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
  • asp之家 网络编程 m.aspxhome.com