问题描述: 做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券),并将生成的激活码保存到Redis中?
需求分析:
- 需求同《Python读书笔记-每日篇-20190219|激活码生成器》
- 激活码存储在Redis中
代码编写:
编写Redis连接API:
#! /usr/bin/env python3
# Filename : myredis.py
conf = {
'HOST':'192.168.9.130',
'PORT':6379,
'DB':0
}
import redis
class myredis(object):
#redis连接池
redis_pool = ''
def __init__(self, host='127.0.0.1',port=6379,db=0):
try:
self.redis_pool = redis.ConnectionPool(host=host,port=port,db=db,decode_responses=True)
except Exception as e:
print("redis connection error:",e)
raise
def insert_serial(self,serial):
REDIS_ID = 'user:gifts'
try:
r = redis.StrictRedis(connection_pool = self.redis_pool)
r.sadd(REDIS_ID,serial)
except Exception as e:
print("redis instance create error:",e)
raise
def query_serial(self,serial):
REDIS_ID = 'user:gifts'
try:
r = redis.StrictRedis(connection_pool = self.redis_pool)
if r.sismember(REDIS_ID,serial):
return True
return False
except Exception as e:
print("redis instance create error:",e)
return True
if __name__ == "__main__":
myrs = myredis(conf['HOST'],conf['PORT'],conf['DB'])
myrs.insert_serial('1')
产生需要的激活码generater3.py
#! /usr/bin/env python3
# Filename : generator.py
import string,random
from com.lreis.daily import myredis
from com.lreis.random.random_test import rand
#产生随机码的域
field = string.ascii_letters + string.digits
class generator(object):
#激活码
data = []
#本次激活码需要数量
need_num = 0
#本次激活码生成数量
cur_num = 0
#激活码长度需求
length = 0
def __init__(self, length =16,need_num=100):
self.length = length
self.need_num = need_num
def generate(self):
mr = myredis.myredis(myredis.conf['HOST'],myredis.conf['PORT'],myredis.conf['DB'])
while self.cur_num < self.need_num:
#生成一个随机码
rand = self.__get_one()
if mr.query_serial(rand):
continue
mr.insert_serial(rand)
self.data.append(rand)
self.cur_num +=1
return self.data
def __get_one(self):
rand = ''.join(random.sample(field,self.length))
while(rand in self.data):
rand = random.sample(field,self.length)
if __name__ == "__main__":
print("[激活码]=>%s"%(str(rand)))
return rand
if __name__ == "__main__":
generator = generator()
#生成100个激活码
datas = generator.generate()
print(datas)