【Python】使用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()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM