tornado小功能API实现

这篇博客介绍了如何在Tornado中实现一个需要特殊凭证访问的API,并强调了在传输过程中的加密需求。提供了Tornado的基础学习资源和一个简单的web端代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0.前言

这次我开始学习python的tornado的api开发,然后给自己定义了几个小的功能:
  1. 只有拥有特殊凭证的人才能访问我们的api
  2. 传输过程中需要加密

tornado的基本用法,就需要大家自己去学习了,提供一个简单的学习网站:tornado基础教程

1.tornado的web端简单代码

# coding=utf8
import tornado.ioloop
import tornado.web
import MySQLdb
import base64
from Crypto import Random
from Crypto.Hash import SHA
from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5
from Crypto.Signature import PKCS1_v1_5 as Signature_pkcs1_v1_5
from Crypto.PublicKey import RSA

# class MainHandler(tornado.web.RequestHandler):
#     def get(self):
#         self.write("You requested the main page")

##定义get方法还是post方法

class StoryHandler(tornado.web.RequestHandler):                    #定义了一个class
    def get(self):                                               #这个定义了一个get方法,这是为了后面重定向用的        
        self.write("You requested the story ")                 #这里显示了,get方法应该返回什么值
class MainHandler(tornado.web.RequestHandler):

    def post(self):                                                #定义了一个post
    	mes = rsa_jiemi(self.get_argument('message'))              #这里是调用了后面的一个rsa解密,因为现在传输是加密了
                                                                   #并且self.get_argument('message'),是toanado里面的一个独立函数,是用来获取post中传输的值
    	if jianc(mes):                                             #判断
self.set_header("Content-Type", "text/plain") #开始显示要传输什么内容

		self.write("You wrote " + ver) 
	else: 
		self.set_header("Content-Type", "text/plain") 
		self.write("You don\'t have access to")
##这个是用来应用方法的
application = tornado.web.Application([                            #这个是用来应用方法的,tornado里面的方法 
		(r"/", MainHandler),                               #这个就是具体来定义了,定义是访问什么目录,并且决定了调用什么class 
		(r"/story/", StoryHandler),
	])            
##用来判断,传输过来的message是否在数据库中
def jianc(test):                                                   #这里就是开始数据库操作了,实现了又固定的凭证,才能访问我们的api
	try:
		db = MySQLdb.connect('127.0.0.1','root','','webtest')
		cursor = db.cursor()
		sql = 'select value from test where value = \'%s\''%test
		cursor.execute(sql)
		results = cursor.fetchall()
		db.commit()
		db.close()
		#print results
		return results
	except:
		db.rollback()
##这个是对传输数据的一个加密,用rsa解密
def rsa_jiemi(message):                                            #这里是一个rsa的解密
	random_generator = Random.new().read                       #这个随机数一定要,不然就无法解密
	with open('master-private.pem') as f:                      #定义了一个公钥和私钥的路径
		key = f.read()
		rsakey = RSA.importKey(key)
		cipher = Cipher_pkcs1_v1_5.new(rsakey)
		text = cipher.decrypt(base64.b64decode(message), random_generator)
		return text
if __name__ == "__main__": 
	application.listen(8888)                                  #定义了我们的api端口 
	tornado.ioloop.IOLoop.instance().start()                  #这里显示了,我们程序的启动

2.传输端的基本代码

import requests
import base64
from Crypto import Random
from Crypto.Hash import SHA
from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5
from Crypto.Signature import PKCS1_v1_5 as Signature_pkcs1_v1_5
from Crypto.PublicKey import RSA



def main(): 
    user_info = {'message': 'yjy'}                                       #这个是定义了我们传输什么参数过去
    user_info['message'] = rsa(user_info['message'])                     #这里是对我们传输数据进行了加密
    r = requests.post("http://192.168.0.33:8888", data=user_info)       #这里开始传输数据了
    #r = requests.get("http://127.0.0.1:8888/story/1")                   
    print r.text                                                         #打印了一个回显的值


def rsa(message):                                                        #定义了数据的加密
	with open('master-public.pem') as f:
		key = f.read()
		rsakey = RSA.importKey(key)
		cipher = Cipher_pkcs1_v1_5.new(rsakey)
		cipher_text = base64.b64encode(cipher.encrypt(message))
		return cipher_text

if __name__ == '__main__':
    main()




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值