面向过程编程 (执行者)
1、4S店 掏钱买车
2、保险公司 上保险
3、税务局 交购置税
4、交管局 验车、选号、交钱、取牌、上牌
面向对象 (指挥者)
买车办事处
1、4S店 掏钱买车
2、保险公司 上保险
3、税务局 交购置税
4、交管局 验车、选号、交钱、取牌、上牌
举例:加密规则
方法一、面向过程
from urllib import parse
import hashlib
def get_vendorid(req_data):
data_dict = {}
sub_list = req_data.split('&')
#【vendorId=1697,poscode=xxx】
for i in sub_list:
# verid=1697
k,v = i.split('=')
#[verid,1697]
# data_dict.setdefault(k,v)
data_dict[k]=v
return data_dict.get('vendorId')
def sign(req_data):
verid = get_vendorid(req_data) #调用获取veriodid函数
first = my_md5(verid)
astr = my_md5(first) #两次md5
url_str = parse.quote_plus(req_data) #url编码
res = my_md5(astr+url_str)
return res
def my_md5(s):
md = hashlib.md5()
md.update(s.encode())
return md.hexdigest()
s = 'vendorId=1697&posCode=pos006&ip=127.0.0.1&posVersion=2.1.1.1.1&mac=;D4-81-D7-CA-20-29;7C-67-A2-9A-06-05;7C-67-A2-9A-06-06;7C-67-A2-9A-06-09;00-00-00-00-00-0000E0'
# print(sign(s))
***********************************************************************************
方法二、面向对象
from urllib import parse
import hashlib
class Sign(object):
def __init__(self,req_data):
self.req_data = req_data #这写了self的话,在其他的函数里面也可以用self.xx
self.get_verid()
self.get_sign()
def md5(self,s):
md = hashlib.md5()
md.update(s.encode())
return md.hexdigest()
def get_verid(self):
data_dict = {}
sub_list = self.req_data.split('&')
for i in sub_list:
k, v = i.split('=')
data_dict[k] = v
self.verid = data_dict.get('vendorId')
def get_sign(self):
frist = self.md5(self.verid)
astr = self.md5(frist)
url_str = parse.quote_plus(self.req_data)
self.sign = self.md5(astr+url_str)
return self.sign
s = 'vendorId=1697&posCode=pos006&ip=127.0.0.1&posVersion=2.1.1.1.1&mac=;D4-81-D7-CA-20-29;7C-67-A2-9A-06-05;7C-67-A2-9A-06-06;7C-67-A2-9A-06-09;00-00-00-00-00-0000E0'
sign = Sign(s)
print(sign.sign)