Discuss / Python / 注释一下

注释一下

Topic source

# 定义ge_md5()函数,用于获取密码的MD5值

def get_md5(s):    #输入的变量s必须是str格式,否则会报错
    return hashlib.md5(s.encode('utf-8')).hexdigest()    #'abc'.encode('utf-8')相当于b'abc'

# 定义User类,再通过新建类实例对象的属性来储存用户密码和salt信息

class User(object):
    def __init__(self, username, password):
        self.username = username        #其实在下面的代码中看username属性没啥用,可以去掉
        self.salt = ''.join([chr(random.randint(48, 122)) for i in range(20)])        #随机生成一个长度20的字符串,作为salt
        self.password = get_md5(password + self.salt)        #数据库中储存的是密码连接salt后的字符串的MD5加密数据

# 在注册db信息的时候,调用了User(username, password)来储存用户信息,即用户密码是用户的password属性
db = {
    'michael': User('michael', '123456'),    
    'bob': User('bob', 'abc999'),    
    'alice': User('alice', 'alice2008')
}

# 登陆验证函数login(), 返回Ture/False. 其中密码格式必须是str格式,否则报错,用户名如果找不到也会报错

def login(username, password):
    if isinstance(password, str):        #检查密码是否是str格式
        try:
            user = db[username.lower()]        #在dict格式的db中查找该用户的类实例数据
            return user.password == get_md5(password + user.salt)        #如果实例属性password和计算出来的MD5值一样则返回Ture, 否则False
        except KeyError:        #如果找不到用户会报错
            print('User <%s> is Not Found' % username)
    else:
        print('Wrong input format')

  • 1

Reply