MyException - 我的异常网
当前位置:我的异常网» Perl/Python » day1功课-登录接口

day1功课-登录接口

www.MyException.Cn  网友分享于:2013-08-22  浏览:0次
day1作业--登录接口

作业:编写登陆接口

  • 输入用户名密码
  • 认证成功后显示欢迎信息
  • 输错三次后锁定

    知识:

    1.循环的使用;

  2.continue,break在循环中中断的作用;

  3.文件的写入,读取;

  4.各基础知识的穿插应用

    一、程序架构图

    二、程序流程图如下:

 

    三、具体代码及思路如下:

    1.导入模块,及主程序页面

import os,json,random

def main_show():
    '''进入主页展示'''
    login_message = '''
-------------------------------------------------------------------------------------------------
                                 您好,欢迎来到京东二货市场
-------------------------------------------------------------------------------------------------1】登录              【2】注册                 【3】解锁               【q】退出
-------------------------------------------------------------------------------------------------
'''
    print(login_message)

    设置程序进入样式,告诉用户进去是什么样子,平台的功能,而不是进去啥都没有。程序要使用到os,json,random标准库。

    2.存储用户文件的读写

def test_file(file):
    '''
    验证存储用户的文件是否存在,不存在生成
    :param file: 文件名
    :return: 无返回值
    '''
    if os.path.exists(file):          #判断用户文件是否存在,不存在生成一个用户文件
        pass
    else:
        with open(file,"w+") as f:
            users = {}
            json.dump(users,f)

def read_file(file):
    '''
    从用户文件中读取用户列表,以方便进行验证
    :param file: 文件名
    :return: 返回读取的用户列表
    '''
    with open(file,'r+') as fr:
        users = json.load(fr)

    return users

def write_file(users,file):
'''
把修改后的用户列表重新写入进去
:param users: 用户名列表
:param file: 文件名
:return: 无返回值
'''
with open(file,'w+') as fw:
json.dump(users,fw)

    第一段函数是判断用户文件是否存在,如果不存在则生成一个用户文件,如果存在了则不生成,为什么要这样呢?防止如果用户文件存在,我们会使用"w+"打开文件的时候把里面的文件信息清空;如果不存在的话,我们就生成用户文件,并且使用json模块把一个空的用户字典写入文件中,方便下面读取添加用户信息。

    第二段函数是读取文件信息,并且以字典形式返回用户字典,这样,我们就可以在字典中操作用户信息了,字典的功能我们都会;另外把读取的功能封装到一个函数中,在后面我们经常会用到,比如用户唯一性验证;修改用户列表的时候都要打开文件。

    第三段函数是重新写入文件中,以"w+"的模式,清空之前的用户列表,重新写入进去,当我们修改用户信息的时候,都需要重新写进去。

    上面判断用户文件是否存在的时候,我们用到了os.path.exists(),这个是用来判断文件是否存在的,存在返回True,否则False。

    3.随机验证码生成

def random_code(length):
    '''
    随机验证码生成模块
    :param length: 验证码的长度,自己定义多长的验证码,开发人员自己定制
    :return: 返回生成的随机验证码
    '''
    codes = []
    for i in range(length):
        num = random.randrange(length)
        if i == num:
            code = random.randint(0,9)
            codes.append(str(code))
        else:
            capital_codes = list(range(65,91))     #小写字符随机验证码数字
            capital_codes.extend(list(range(97,123)))  #大写数字随机验证码数字
            tem_code = random.choice(capital_codes)   #random.choice()随机跳跳出一个元素,因为随机,不知道跳出那个
            codes.append(chr(tem_code))
    rand_code = "".join(codes)
    return rand_code

    上面代码是用来生成随机验证码的,length是随机验证码的长度,我们可以自己定义长度,验证码是由数字,大写,小写字母组成,是随机生成的,我们知道,大写字符是从:65-90,小写字母是从:97-122,我们先把这两个范围的数放到一个列表中,然后使用random.choice()从列表中随机挑选一个数字,然后进行转码,转换成字母形式, 这里要注意的是列表功能extend(),这个功能没有生成新的列表,如list1.extend(list2),是把list2中的元素扩展到list1中,改变list1。

    在这里,我们也用到了字符串中的拼接str.join(),由于把列表元素拼接成一个新的字符串。

    4.登录函数

def log_in(users):
    '''
    登录模块
    :param user: 用户名
    :param pwd: 密码
    :param users: 用户列表{"alex":[123456,"unlocked","15111252591"}
    :return: 无返回值
    '''
    flag = True
    while flag:
        user = input("请输入您的用户名:")
        if user in users.keys():
            '''判断用户名是否存在,存在之后验证是否锁定,如果锁定告诉要联系管理员解锁'''
            if users[user][1] == 'locked':
                print("对不起,您输入的密码已经锁定,请联系管理员解锁!!!")
                break
            '''我们知道,我们登录网站都是先验证用户名存在不存在,如果存在了,就输入密码,但是不会先验证密码,而是输入验证码
            ,验证码输入之后,验证验证码是否正确,如果验证码正确才会验证密码'''
            pwd = input("请输入您的密码:")
            '''输入验证码,并且先验证验证码是否正确,验证码输入是没有限制的,一直到你输入对位置'''
            while True:
                random_num = random_code(6)    #调用随机验证码生成函数,生成一个6位数的随机验证码
                print("验证码:",random_num)
                verification_code = input("请输入验证码:").lower()
                if verification_code == random_num.lower():
                    break
                else:
                    print("验证码输入有误,请重新输入:")
                    continue
            '''验证码验证完毕之后,该验证密码,密码和验证码不一样,密码是有输入次数限制的,密码只能输入三次'''
            try_num = 0
            while try_num < 3:
                if pwd == users[user][0]:
                    print("登录成功,欢迎来到京东二手市场!")
                    flag = False
                    break
                else:
                    if try_num != 2:
                        print("您输入的密码有误,你还有%s次锁定用户!" %(2-try_num))
                        pwd = input("请输入您的密码:")
                    else:
                        print("您输入的次数过多,账户已经锁定,请联系管理员解锁!")
                        users[user][1] = "locked"
                        flag = False
                        break
                    try_num += 1
        else:
            print("对不起,您输入的用户名没有注册!!!")
            break
    return users

    此函数是登录功能的核心,用户信息是以字典形式存储的{username:[pwd,unlocked,telephone]},首先让用户输入用户名,并验证用户名是否注册,没有注册是不能登录的;验证成功之后验证用户是否锁定,锁定也是不能登录的(如,我们去取款机,如果锁定的话,肯定是没有后续操作的);输入密码,密码输入之后不会立马验证,每个网站基本上都不会先验证密码,而是让用户先输入验证码,先进行验证码的验证,验证码输入是没有次数限制的,验证码验证成功之后,进行密码验证,如果密码输入成功,则登录成功;否则会有三次机会,这个是按照银行系统来的,如果没有连续输入三次错误,则后续还能在输入三次,当然没有银行那样时间限制,银行是隔天才重新回复三次机会,当天只有三次机会。如果三次都错误,则锁定密码。锁定之后就只能解锁之后才登录了。

    里面的新尝试,循环里面嵌套pwd = input("请输入您的密码:"),以前总是一根筋,如何先输入密码,输入之后先验证验证码,后验证密码,现在在验证密码的时候,重新在循环里面添加让用户输入密码的语句即可。

    5.注册模块

def register(status="unlocked"):
    '''
    进行注册,注册完成之后写入文件内部,默认都是没有锁定的
    :return: 无返回值,只是注册之后重新写入文件库
    '''
    message = '''
    ---------------------------------------------------------------------------------------------
                               \033[34;1m 欢迎来到注册平台,请按照下面提示进行注册\033[0m
    ---------------------------------------------------------------------------------------------
    '''
    flag = True
    while flag:
        username = input("请输入你的用户名:")
        flag = uniqueness_verification(username)
    ''''我们知道,密码一般是需要输入两次的,两次一直才算成功'''
    while True:
        pwd1 = input("请输入您的密码:")
        pwd2 = input("请再次输入密码:")
        if pwd1 == pwd2:
            break
        else:
            print("两次输入的密码不一致,请重新输入:")
    while True:
        telephone_num = input("请输入你的手机号:")
        if len(telephone_num) == 11:
            break
        else:
            print("对不起,您输入的手机号码有误,请重新输入!!")
    '''都输入完成之后,要存入到文件中'''
    '''注册验证码都是最后输入的,输入只需要正确就可以,没有说验证要在密码验证前面'''
    while True:
        random_num = random_code(4)
        print("\033[31m验证码:%s\033[0m" %random_num)
        input_num = input("请输入验证码:")
        if random_num.lower() == input_num.lower():    #统一转化为小写,这样就不用在意用户输入什么直接可以验证
            break
        else:
            print("您输入的验证码有误,请重新输入!")
    filename = "users_file"
    users = read_file(filename)   #读取之前文件中用户,进行添加
    users[username] = [pwd1,status,telephone_num]   #新增注册
    print("恭喜你,注册成功!")
    '''注册成功之后,写入文件'''
    write_file(users, filename)   #注册完成之后,重新写入文件

     注册模块的主题,首先展示注册模块的样式,接着让用户输入用户名,并进行唯一性验证,验证是否用户名已经被使用;接着输入密码两次,两次密码要一致,接着输入手机号,手机号码限定长度是11位;然后输入验证码;注册成功之后,打开文件,并且把新注册用户添加进去,重新写入用户文件。

    6.唯一性约束

def uniqueness_verification(username):
    '''
    用户名唯一性验证,我们知道,用户名是不允许重复的,其实手机号也有唯一性约束,但是我们知道,手机号总是经常改变,
    :param username: 用户名
    :return: 无返回值
    '''
    flag = False
    filename = "users_file"
    users = read_file(filename)
    if username in users.keys():
        print("对不起,您输入的用户名已经注册,请重新输入!")
        return True
    else:
        return flag

    上面代码是实现用户名唯一性的验证,我们知道,注册的时候要求用户名是唯一的。

    7.解锁功能

def unlock(filename):
    '''
    管理员进行解锁,正常来说只有管理员才能够解锁,这样就只能在添加控制条件了,不过也没关系,就当联系尝试了
    不过应该超级管理员都是在一个文件单独存放的,只有联系超级管理员才能够解锁,需要一些验证,才能登录超级管理员
    这里因为也没有太好的办法来交互了,就用户自己解锁,通过手机号,这个还是很多网站常用的找回密码的方法,只要修改了密码
    就当重新解锁了,支付宝呀,等在线都是这样操作的
    :param filename: 文件名
    :return:
    '''
    '''打开文件,读取用户信息'''
    users = read_file(filename)
    message = '''\033[36;1m
    --------------------------------------------------------------------------------------------------1】修改密码                                             【2】找回密码
    --------------------------------------------------------------------------------------------------
    \033[0m'''
    print(message)
    flag = True    #循环开启和关闭的标志
    while flag:

        function_num = input("请选择您要操作的功能:")
        if not function_num in ['1','2']:
            print("您输入的功能有误,请重新输入!")
            continue
        username = input("请输入用户名:")   #判断用户名是否存在
        if username in users.keys():
            ''''通过手机号进行修改密码'''
            while True:
                telephone_num = input("请输入您的手机号:")
                if telephone_num == users[username][2]:
                    '''验证码验证'''
                    while True:
                        rand_num = random_code(4)
                        print("验证码:",rand_num)
                        tem_random_code = input("请输入验证码:")
                        if rand_num.lower() == tem_random_code.lower():
                            break
                        else:
                            print("您输入的验证码有误,请重新输入!")
                    break
                else:
                    print("您输入的手机号有误,请重新输入!")
            while True:
                if function_num == '1':
                    pwd1 = input("请输入你要修改的密码:")
                    pwd2 = input("请再次输入您要修改的密码:")
                    if pwd1 == pwd2:
                        print("密码修改成功!")
                        users[username][0] = pwd1
                        users[username][1] = "unlocked"
                        flag = False
                        break
                    else:
                        print("对不起,您两次输入的密码不一致,请重新输入!")
                        continue
                elif function_num == "2":
                    print("\033[30m您的账户密码是:\033[0m",users[username][0])
                    users[username][1] = 'unlocked'
                    flag = False
                    break
        else:
            print("对不起,您输入的用户没有注册!!!")
            break
    return users    #解锁成功之后,返回新的用户名表,并重写写入到文件中

    上面代码实现解锁功能,解锁里面有两种情况,一种是找回密码,一种是修改密码;找回密码我们是通过手机号来找回的,让用户输入注册手机号,并输入验证码,通过后台把原密码发送至用户手机;修改密码也是通过手机号,当然,用户登录成功之后,可以直接修改用户密码,这里没有实现;密码修改之后,要重新写入用户文件。修改用户文件信息都要通过读和写两步。

    验证码的验证:rand_num.lower() == tem_random_code.lower(),我们通过把验证码和用户名统一转化为大写或者小写,实现让用户无论输入什么,都统一进行转换比较,提升用户的体验度。

    8.各主菜单展示模块

 

def login_show():
    '''登录展示提醒'''
    show_message = '''
    -----------------------------------------------------------------------------------------------
                               \033[34m  欢迎来到登录界面,请按一下提示完成登录
                             如果发现账号锁定,请进行验证解锁,祝你冲浪愉快[0m
    -----------------------------------------------------------------------------------------------
    '''
    print(show_message)

def register_show():
    '''
    注册展示页面,进行提醒
    :return:
    '''
    show_message = '''
    ----------------------------------------------------------------------------------------------------
                                  \033[32;1m   欢迎来到注册页面,请按照以下提示完成注册 \033[0m
    ----------------------------------------------------------------------------------------------------
    '''
    print(show_message)

def unlock_show():
    '''解锁页面展示'''
    show_message = '''\033[33;1m
    ----------------------------------------------------------------------------------------------------
                         欢迎来到解锁页面,请按照下面提示进行解锁
                          您可以选择找回密码,或者修改密码
    ----------------------------------------------------------------------------------------------------
    \033[0m'''
    print(show_message)

 

    上面的代码,主要是为了好看,让界面看起来顺眼,一目了然,让用户知道自己在哪里,在干什么。

    9.程序主体

if __name__ == "__main__":
    main_show()
    flag = True
    while flag:
        choice_num = input("请选择您要选择的操作:")
        if choice_num == '1':
            login_show()
            '''判断用户文件是否存在'''
            filename = 'users_file'
            test_file(filename)
            users = read_file(filename)
            users_message = log_in(users)
            write_file(users_message,filename)
        elif choice_num == '2':
            register_show()
            register()
        elif choice_num == '3':
            unlock_show()
            '''修改密码,解除锁定,我们知道,现在网络平台都是通过手机号自己解锁的,不过要通过验证码充值密码'''
            filename = 'users_file'
            users = unlock(filename)
            write_file(users,filename)
        elif choice_num == 'q':
            break
        else:
            print("对不起,找不到您输入编号的功能,请重新输入")
            continue

    上面代码就是把上面所有的函数串联到一起,主体其实很简单,就判断用户选择的是什么功能,具体操作都在之前的代码块里面,只需要调用传入参数即可。

    所有上面函数组合一起:

import os,json,random

def main_show():
    '''进入主页展示'''
    login_message = '''
-------------------------------------------------------------------------------------------------
                                 您好,欢迎来到京东二货市场
-------------------------------------------------------------------------------------------------1】登录              【2】注册                 【3】解锁               【q】退出
-------------------------------------------------------------------------------------------------
'''
    print(login_message)

def test_file(file):
    '''
    验证存储用户的文件是否存在,不存在生成
    :param file: 文件名
    :return: 无返回值
    '''
    if os.path.exists(file):
        pass
    else:
        with open(file,"w+") as f:
            users = {}
            json.dump(users,f)

def read_file(file):
    '''
    从用户文件中读取用户列表,以方便进行验证
    :param file: 文件名
    :return: 返回读取的用户列表
    '''
    with open(file,'r+') as fr:
        users = json.load(fr)

    return users

def write_file(users,file):
    '''
    把修改后的用户列表重新写入进去
    :param users: 用户名列表
    :param file:  文件名
    :return: 无返回值
    '''
    with open(file,'w+') as fw:
        json.dump(users,fw)

def random_code(length):
    '''
    随机验证码生成模块
    :param length: 验证码的长度,自己定义多长的验证码,开发人员自己定制
    :return: 返回生成的随机验证码
    '''
    codes = []
    for i in range(length):
        num = random.randrange(length)
        if i == num:
            code = random.randint(0,9)
            codes.append(str(code))
        else:
            capital_codes = list(range(65,91))     #小写字符随机验证码数字
            capital_codes.extend(list(range(97,123)))  #大写数字随机验证码数字
            tem_code = random.choice(capital_codes)   #random.choice()随机跳跳出一个元素,因为随机,不知道跳出那个
            codes.append(chr(tem_code))
    rand_code = "".join(codes)
    return rand_code

def log_in(users):
    '''
    登录模块
    :param user: 用户名
    :param pwd: 密码
    :param users: 用户列表{"alex":[123456,"unlocked","15111252591"}
    :return: 无返回值
    '''
    flag = True
    while flag:
        user = input("请输入您的用户名:")
        if user in users.keys():
            '''判断用户名是否存在,存在之后验证是否锁定,如果锁定告诉要联系管理员解锁'''
            if users[user][1] == 'locked':
                print("对不起,您输入的密码已经锁定,请联系管理员解锁!!!")
                break
            '''我们知道,我们登录网站都是先验证用户名存在不存在,如果存在了,就输入密码,但是不会先验证密码,而是输入验证码
            ,验证码输入之后,验证验证码是否正确,如果验证码正确才会验证密码'''
            pwd = input("请输入您的密码:")
            '''输入验证码,并且先验证验证码是否正确,验证码输入是没有限制的,一直到你输入对位置'''
            while True:
                random_num = random_code(6)    #调用随机验证码生成函数,生成一个6位数的随机验证码
                print("验证码:",random_num)
                verification_code = input("请输入验证码:").lower()
                if verification_code == random_num.lower():
                    break
                else:
                    print("验证码输入有误,请重新输入:")
                    continue
            '''验证码验证完毕之后,该验证密码,密码和验证码不一样,密码是有输入次数限制的,密码只能输入三次'''
            try_num = 0
            while try_num < 3:
                if pwd == users[user][0]:
                    print("登录成功,欢迎来到京东二手市场!")
                    flag = False
                    break
                else:
                    if try_num != 2:
                        print("您输入的密码有误,你还有%s次锁定用户!" %(2-try_num))
                        pwd = input("请输入您的密码:")
                    else:
                        print("您输入的次数过多,账户已经锁定,请联系管理员解锁!")
                        users[user][1] = "locked"
                        flag = False
                        break
                    try_num += 1
        else:
            print("对不起,您输入的用户名没有注册!!!")
            break
    return users

def register(status="unlocked"):
    '''
    进行注册,注册完成之后写入文件内部,默认都是没有锁定的
    :return: 无返回值,只是注册之后重新写入文件库
    '''
    message = '''
    ---------------------------------------------------------------------------------------------
                               \033[34;1m 欢迎来到注册平台,请按照下面提示进行注册\033[0m
    ---------------------------------------------------------------------------------------------
    '''
    flag = True
    while flag:
        username = input("请输入你的用户名:")
        flag = uniqueness_verification(username)
    ''''我们知道,密码一般是需要输入两次的,两次一直才算成功'''
    while True:
        pwd1 = input("请输入您的密码:")
        pwd2 = input("请再次输入密码:")
        if pwd1 == pwd2:
            break
        else:
            print("两次输入的密码不一致,请重新输入:")
    while True:
        telephone_num = input("请输入你的手机号:")
        if len(telephone_num) == 11:
            break
        else:
            print("对不起,您输入的手机号码有误,请重新输入!!")
    '''都输入完成之后,要存入到文件中'''
    '''注册验证码都是最后输入的,输入只需要正确就可以,没有说验证要在密码验证前面'''
    while True:
        random_num = random_code(4)
        print("\033[31m验证码:%s\033[0m" %random_num)
        input_num = input("请输入验证码:")
        if random_num.lower() == input_num.lower():    #统一转化为小写,这样就不用在意用户输入什么直接可以验证
            break
        else:
            print("您输入的验证码有误,请重新输入!")
    filename = "users_file"
    users = read_file(filename)   #读取之前文件中用户,进行添加
    users[username] = [pwd1,status,telephone_num]   #新增注册
    print("恭喜你,注册成功!")
    '''注册成功之后,写入文件'''
    write_file(users, filename)   #注册完成之后,重新写入文件

def uniqueness_verification(username):
    '''
    用户名唯一性验证,我们知道,用户名是不允许重复的,其实手机号也有唯一性约束,但是我们知道,手机号总是经常改变,
    :param username: 用户名
    :return: 无返回值
    '''
    flag = False
    filename = "users_file"
    users = read_file(filename)
    if username in users.keys():
        print("对不起,您输入的用户名已经注册,请重新输入!")
        return True
    else:
        return flag

def unlock(filename):
    '''
    管理员进行解锁,正常来说只有管理员才能够解锁,这样就只能在添加控制条件了,不过也没关系,就当联系尝试了
    不过应该超级管理员都是在一个文件单独存放的,只有联系超级管理员才能够解锁,需要一些验证,才能登录超级管理员
    这里因为也没有太好的办法来交互了,就用户自己解锁,通过手机号,这个还是很多网站常用的找回密码的方法,只要修改了密码
    就当重新解锁了,支付宝呀,等在线都是这样操作的
    :param filename: 文件名
    :return:
    '''
    '''打开文件,读取用户信息'''
    users = read_file(filename)
    message = '''\033[36;1m
    --------------------------------------------------------------------------------------------------1】修改密码                                             【2】找回密码
    --------------------------------------------------------------------------------------------------
    \033[0m'''
    print(message)
    flag = True    #循环开启和关闭的标志
    while flag:

        function_num = input("请选择您要操作的功能:")
        if not function_num in ['1','2']:
            print("您输入的功能有误,请重新输入!")
            continue
        username = input("请输入用户名:")   #判断用户名是否存在
        if username in users.keys():
            ''''通过手机号进行修改密码'''
            while True:
                telephone_num = input("请输入您的手机号:")
                if telephone_num == users[username][2]:
                    '''验证码验证'''
                    while True:
                        rand_num = random_code(4)
                        print("验证码:",rand_num)
                        tem_random_code = input("请输入验证码:")
                        if rand_num.lower() == tem_random_code.lower():
                            break
                        else:
                            print("您输入的验证码有误,请重新输入!")
                    break
                else:
                    print("您输入的手机号有误,请重新输入!")
            while True:
                if function_num == '1':
                    pwd1 = input("请输入你要修改的密码:")
                    pwd2 = input("请再次输入您要修改的密码:")
                    if pwd1 == pwd2:
                        print("密码修改成功!")
                        users[username][0] = pwd1
                        users[username][1] = "unlocked"
                        flag = False
                        break
                    else:
                        print("对不起,您两次输入的密码不一致,请重新输入!")
                        continue
                elif function_num == "2":
                    print("\033[30m您的账户密码是:\033[0m",users[username][0])
                    users[username][1] = 'unlocked'
                    flag = False
                    break
        else:
            print("对不起,您输入的用户没有注册!!!")
            break
    return users    #解锁成功之后,返回新的用户名表,并重写写入到文件中

def login_show():
    '''登录展示提醒'''
    show_message = '''
    -----------------------------------------------------------------------------------------------
                               \033[34m  欢迎来到登录界面,请按一下提示完成登录
                             如果发现账号锁定,请进行验证解锁,祝你冲浪愉快[0m
    -----------------------------------------------------------------------------------------------
    '''
    print(show_message)

def register_show():
    '''
    注册展示页面,进行提醒
    :return:
    '''
    show_message = '''
    ----------------------------------------------------------------------------------------------------
                                  \033[32;1m   欢迎来到注册页面,请按照以下提示完成注册 \033[0m
    ----------------------------------------------------------------------------------------------------
    '''
    print(show_message)

def unlock_show():
    '''解锁页面展示'''
    show_message = '''\033[33;1m
    ----------------------------------------------------------------------------------------------------
                         欢迎来到解锁页面,请按照下面提示进行解锁
                          您可以选择找回密码,或者修改密码
    ----------------------------------------------------------------------------------------------------
    \033[0m'''
    print(show_message)


if __name__ == "__main__":
    main_show()
    flag = True
    while flag:
        choice_num = input("请选择您要选择的操作:")
        if choice_num == '1':
            login_show()
            '''判断用户文件是否存在'''
            filename = 'users_file'
            test_file(filename)
            users = read_file(filename)
            users_message = log_in(users)
            write_file(users_message,filename)
        elif choice_num == '2':
            register_show()
            register()
        elif choice_num == '3':
            unlock_show()
            '''修改密码,解除锁定,我们知道,现在网络平台都是通过手机号自己解锁的,不过要通过验证码充值密码'''
            filename = 'users_file'
            users = unlock(filename)
            write_file(users,filename)
        elif choice_num == 'q':
            break
        else:
            print("对不起,找不到您输入编号的功能,请重新输入")
            continue

    四、代码功能展示:

 

     1.主页面

-------------------------------------------------------------------------------------------------
                                 您好,欢迎来到京东二货市场
-------------------------------------------------------------------------------------------------
       【1】登录              【2】注册                 【3】解锁               【q】退出
-------------------------------------------------------------------------------------------------

请选择您要选择的操作:

    2.登录
请选择您要选择的操作:1

    -----------------------------------------------------------------------------------------------
                                 欢迎来到登录界面,请按一下提示完成登录
                             如果发现账号锁定,请进行验证解锁,祝你冲浪愉快[0m
    -----------------------------------------------------------------------------------------------
    
请输入您的用户名:alexsb
对不起,您输入的用户名没有注册!!!
请选择您要选择的操作:1

    -----------------------------------------------------------------------------------------------
                                 欢迎来到登录界面,请按一下提示完成登录
                             如果发现账号锁定,请进行验证解锁,祝你冲浪愉快[0m
    -----------------------------------------------------------------------------------------------
    
请输入您的用户名:耿长学
请输入您的密码:456789
验证码: 3q4QZJ
请输入验证码:3q4qzs
验证码输入有误,请重新输入:
验证码: YlhBir
请输入验证码:ylhbir
您输入的密码有误,你还有2次锁定用户!
请输入您的密码:456789
您输入的密码有误,你还有1次锁定用户!
请输入您的密码:456789
您输入的次数过多,账户已经锁定,请联系管理员解锁!
请选择您要选择的操作:耿长学
对不起,找不到您输入编号的功能,请重新输入
请选择您要选择的操作:1

    -----------------------------------------------------------------------------------------------
                                 欢迎来到登录界面,请按一下提示完成登录
                             如果发现账号锁定,请进行验证解锁,祝你冲浪愉快[0m
    -----------------------------------------------------------------------------------------------
    
请输入您的用户名:耿长学
对不起,您输入的密码已经锁定,请联系管理员解锁!!!

    2.注册   

-------------------------------------------------------------------------------------------------
                                 您好,欢迎来到京东二货市场
-------------------------------------------------------------------------------------------------
       【1】登录              【2】注册                 【3】解锁               【q】退出
-------------------------------------------------------------------------------------------------

请选择您要选择的操作:2

    ----------------------------------------------------------------------------------------------------
                                     欢迎来到注册页面,请按照以下提示完成注册
    ----------------------------------------------------------------------------------------------------
    
请输入你的用户名:耿长学
对不起,您输入的用户名已经注册,请重新输入!
请输入你的用户名:alexsb
请输入您的密码:123456
请再次输入密码:123456
请输入你的手机号:151116969251
对不起,您输入的手机号码有误,请重新输入!!
请输入你的手机号:15111696938
验证码:TC2A
请输入验证码:txas
您输入的验证码有误,请重新输入!
验证码:7wff
请输入验证码:7wff
恭喜你,注册成功!

    上面,注册了的用户是不能重新注册的,手机号有验证,密码有验证,并且默认注册都是未锁定的,这个函数里面有默认,用户是看不到的。

    3.解锁

    (1)修改密码

-------------------------------------------------------------------------------------------------
                                 您好,欢迎来到京东二货市场
-------------------------------------------------------------------------------------------------
       【1】登录              【2】注册                 【3】解锁               【q】退出
-------------------------------------------------------------------------------------------------

请选择您要选择的操作:3

    ----------------------------------------------------------------------------------------------------
                         欢迎来到解锁页面,请按照下面提示进行解锁
                          您可以选择找回密码,或者修改密码
    ----------------------------------------------------------------------------------------------------
    

    --------------------------------------------------------------------------------------------------
              【1】修改密码                                             【2】找回密码
    --------------------------------------------------------------------------------------------------
    
请选择您要操作的功能:1
请输入用户名:耿长学
请输入您的手机号:15111252591
验证码: oRxW
请输入验证码:orxw
请输入你要修改的密码:123456
请再次输入您要修改的密码:123456
密码修改成功!

    (2)找回密码

-------------------------------------------------------------------------------------------------
                                 您好,欢迎来到京东二货市场
-------------------------------------------------------------------------------------------------
       【1】登录              【2】注册                 【3】解锁               【q】退出
-------------------------------------------------------------------------------------------------

请选择您要选择的操作:3

    ----------------------------------------------------------------------------------------------------
                         欢迎来到解锁页面,请按照下面提示进行解锁
                          您可以选择找回密码,或者修改密码
    ----------------------------------------------------------------------------------------------------
    

    --------------------------------------------------------------------------------------------------
              【1】修改密码                                             【2】找回密码
    --------------------------------------------------------------------------------------------------
    
请选择您要操作的功能:2
请输入用户名:user
对不起,您输入的用户没有注册!!!
请选择您要选择的操作:3

    ----------------------------------------------------------------------------------------------------
                         欢迎来到解锁页面,请按照下面提示进行解锁
                          您可以选择找回密码,或者修改密码
    ----------------------------------------------------------------------------------------------------
    

    --------------------------------------------------------------------------------------------------
              【1】修改密码                                             【2】找回密码
    --------------------------------------------------------------------------------------------------
    
请选择您要操作的功能:2
请输入用户名:耿长学
请输入您的手机号:15111252591
验证码: Uess
请输入验证码:uess
您的账户密码是: 123456

    q.退出

    知识总结:

    1、os模块的使用,os.path.exists(file),学的知识要经常用,要经常写代码,只有通过不断的写代码,才会尝试用学到的知识,想方法,解决问题;

    2、验证的先后顺序学习,其实先验证谁都是可以的,就看循环放在哪里,谁先进行循环,次序问题,这个要根据具体实际要求;

    3、随机验证码random.choice()使用,列表extend()使用,这些平时都不怎么常用,关键的时候会发挥很大的作用;

    4、json文件的读取和写入,这个模块后续我还会单独测试,要自己在写代码的过程中发现问题,然后去测试,我想测试是否可以load()不是dump()进去的文件,并熟练使用方法,之前我一直以为dumps(mess)直接可以写到文件中,原来还需要f.write()进行写入,真他妈的天真,当然通过自己代码积累,而不是不练习,自己知识在进步中。

文章评论

编程语言是女人
编程语言是女人
中美印日四国程序员比较
中美印日四国程序员比较
 程序员的样子
程序员的样子
每天工作4小时的程序员
每天工作4小时的程序员
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
老程序员的下场
老程序员的下场
总结2014中国互联网十大段子
总结2014中国互联网十大段子
漫画:程序员的工作
漫画:程序员的工作
如何成为一名黑客
如何成为一名黑客
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
我的丈夫是个程序员
我的丈夫是个程序员
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
程序员都该阅读的书
程序员都该阅读的书
那些争议最大的编程观点
那些争议最大的编程观点
10个调试和排错的小建议
10个调试和排错的小建议
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
代码女神横空出世
代码女神横空出世
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
程序员应该关注的一些事儿
程序员应该关注的一些事儿
旅行,写作,编程
旅行,写作,编程
我是如何打败拖延症的
我是如何打败拖延症的
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
鲜为人知的编程真相
鲜为人知的编程真相
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
Java程序员必看电影
Java程序员必看电影
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
为什么程序员都是夜猫子
为什么程序员都是夜猫子
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有