背景
最近做博客想加入注册邀请码的功能 总结如下:
- 注册码要在服务器端生成
- 不能重复
- 每次注册需要消耗掉一个邀请码
今天主要来看邀请码的生成代码
python 生成邀请码
import random
import string
s_set = string.ascii_letters + string.digits
raw_code_len = 8
class Code(models.Model):
raw_code = fields.Char(string=u'原始码', index=True)
@property
def code(self):
id_str = '{:0>8x}'.format(self.id) # 转换为16进制,并用0填充至8位,故最大值为16**8 - 1
return ''.join(''.join(i) for i in zip(id_str, self.raw_code)) # 在id的每个数字后填充随机字符,构成最终的码
def check_code(self, code):
id_str = code[::2]
raw_code = code[1::2]
try:
int(id_str, 16)
except ValueError, e:
return False
c = self.sudo().browse(int(id_str, 16))
if c.exists() and c.raw_code == raw_code:
return c
else:
return False
@classmethod
def generate_raw_code(cls):
return ''.join(random.choice(s_set) for i in range(raw_code_len))
def create(self, vals):
c = super(Code, self).create(vals)
c.raw_code = c.generate_raw_code()
return c