使用python的tornado配合html页面示例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用python的tornado配合html页面示例相关的知识,希望对你有一定的参考价值。

背景:java写的非标加密算法,测试时执行java工程进行解密测试,很不方便。

目的:想写个web页面,使得任何测试人员都可以在输入加密串时得到解密后字段,方便日志查询及字段核对。(额,算法部分就不写了。)

步骤:由于内部使用的是非标Base64加密算法,所以我该次操作分为3个部分,以下具体介绍并附带python代码

1 将java的非标加密算法转为python

2 使用python的tornado调用该算法

3 编写html页面,简单明了

一 java非标加密算法转为python  dncrypte.py

#-*- coding:utf-8 -*-
import array
#该部分设置字符对应规则,后续解密部分使用它来做对应
BASE64CHAR=[****]
...
def dncryped(string):
        #定义数组,用来存放解密后的字符,outlen为数组长度
        outbyte=[0 for j in range(outlen)] 
	#解密规则及算法,得到解密后的outbyte数组
	return ‘‘.join(outbyte)
#print dncryped("FMK60hD")  测试部分

问题:python中提供的数据类型远少于java,但是它提供了转化功能。比如‘ord‘将字符对应到ascii码,‘chr‘将ascii码对应到字符,可在做位于时使用。返回是使用了‘‘.join(outbyte),是因为outbyte中存储的ascii码,所以将其转化为对应的字符数组。

二 使用python的tornado调用该算法  test.py

# -*- coding:utf-8 -*-
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from dncrypte import *  #引入自己的方法
from tornado.options import define, options
define("port", default=8000, help="run on the given port", type=int)

class IndexHandler(tornado.web.RequestHandler):
    def get(self):
        encry=self.get_argument(Encrypted, Hello)
        Encrypted=dncryped(encry)  #调用解密方法
        self.write(Encrypted)     
if __name__ == "__main__":
    tornado.options.parse_command_line()
    app = tornado.web.Application(handlers=[(r"/", IndexHandler)])
    http_server = tornado.httpserver.HTTPServer(app)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()

启动:python test.py --port=9999 

访问:ip:9999,在url后添加?/Encrypted=加密串,enter即可得到解密结果,如下:

技术分享

三 编写html页面  test.html&test.py

原本到第二步即可使用了,不过在url中输入加密串总是不太方便,于是想配合html5,做一个简单页面。达到如下效果:

技术分享

1 新增一个文件 test.html

<form action="http://myip:8888/?Encrypted=" method="post">
    请输入加密串:<input type="text" name="word" id="word" value="" />
    <input type="submit" value="提交" />
    </br>
    <table class="table table-bordered table-condensed table-responsive">
        {{result}}
    </table>
    </br>
</form>

2 需要改动原来的test.py

# -*- coding:utf-8 -*-
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from dncrypte import *  #引入自己的方法
from tornado.options import define, options
define("port", default=8000, help="run on the given port", type=int)

class IndexHandler(tornado.web.RequestHandler):
    def get(self):
        result = ""
        Encrypted = ""
        self.render(test.html,**getlocals(locals()))
    def post(self):
        encry=self.get_argument(Encrypted, Hello)
        result = dncryped(encry)
            self.render(test.html,**getlocals(locals()))
def getlocals(locals):
    tmpd={}
    for k,v in locals.iteritems():
        if k not in [self]:
            tmpd[k] = v
    return tmpd
if __name__ == "__main__":
    tornado.options.parse_command_line()
    app = tornado.web.Application(handlers=[(r"/", IndexHandler)])
    http_server = tornado.httpserver.HTTPServer(app)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()

以上是关于使用python的tornado配合html页面示例的主要内容,如果未能解决你的问题,请参考以下文章

Tornado模板

基于Python Tornado的在线问答系统

Python tornado初探

Six——tornado操作之用户表单(密码,用户名)数据库迁移使用SQLAlchemy+pymysql配合alembic实现!

python web框架之Tornado的简单使用

python---session(tornado中使用)缓存