zoukankan      html  css  js  c++  java
  • Day1作业1:登陆接口(加入日志、注册功能)

    流程图如下:

      最先考虑使用python中的list,以能取到user_list中的用户信息,但中途发现没有比较好的方法截取取密码,还是新手的缘故,最终选择了使用dict,以方便截取用户名以及相应的密码。

    user_list格式如下:

    xxx:xxx
    xxx:xxx
    xxx:xxx
    View Code

    user_lock格式如下:

    xxx
    xxx
    xxx
    View Code

    Code:

    #!/usr/bin/env python
    # encoding: utf-8
    # Auther:ccorz Mail:ccniubi@163.com
    
    import time,getpass,os
    #  将输入用户赋值于user_name变量
    # print('=============',os.popen('pwd').read())
    user_name=input('请输入您的用户名:')
    #  打开文件user_list,user_lock,赋予读写权限
    user_list=open('user_list','r+')
    user_lock=open('user_lock','r+')
    #设置日志文件,open如果,用追加模式
    log_file=open('login.log','a+')
    #  设置一个退出标识符
    break_flag=0
    time_now=time.strftime('%Y-%m-%d %H:%M:%S')
    
    #遍历user_lock被锁用户文件
    for line in user_lock:
        # 设置被锁用户的变量,strip()将字符串两边的空格符去掉
        lock_name=line.strip()
        #判断输入用户是否与遍历用户相同
        if user_name==lock_name:
            print('您的用户已被锁定...请尝试其他的用户')
            log_file.write('
    %s:被锁定用户%s尝试登陆!'%(time_now,user_name))
            #修改退出标识符的值,以便区分既在user_list,又在user_lock的用户
            break_flag=1
            #退出循环
            break
    #将空字典赋予变量account
    account={}
    for line in user_list:
        #遍历user_list文件,将一行的字符串去掉空格,并按":"分割为key value,并将key value添加入dict中
        account[line.strip().split(':')[0]]=line.strip().split(':')[1]
    # print(account)
    
    # break_flag==0用来区分在user_list,user_lock中同时存在的用户,
    # 如果没有此标识符,上面遍历锁用户文件也会执行以下程序
    if user_name in account and break_flag==0:
        #设置计数器,初始值为0
        count=0
        #循环3次
        while count < 3:
            password=input('请输入%s的密码:'%user_name)
            # 校验密码
            if password==account[user_name]:
                print('欢迎登陆系统.......')
                log_file.write('
    %s,user %s had login.'%(time_now,user_name))
                # 退出循环
                break
            else:
                # 密码错误,将计数器+1
                count+=1
                print('%s的密码错误,请重新输入,您还有%s次机会'% (user_name,3-count))
        # 循环超过3次,执行下面命令
        else:
            print('用户%s已经被锁定,请联系管理员!'%user_name)
            # 将密码输入超过3此的用户名添加进user_lock,写入日志文件
            user_lock.write('
    %s'%user_name)
            log_file.write('
    %s:%s is locked!'%(time.strftime('%Y-%m-%d %H:%M:%S'),user_name))
    if user_name not in account:
        # 33[1;44;33m....33[0m 高亮显示,并提醒用户无此用户,是否用此用户名注册
        regis_or_quit=input('''33[1;44;33m没有用户%s,是否注册此用户?33[0m
    33[1;44;33m输入"y"继续注册,输入"q"退出:33[0m'''%user_name)
        #将输入的字符串转化为小写并与y或者q匹配
        if regis_or_quit.lower()=='q':
            print('Bye!!!!!!!!')
        elif regis_or_quit.lower()=='y':
            #直接使用user_name注册,第一次输入密码密码,如果不想显示明文密码可用getpass.getpass('...')
            regis_pass=input('请输入%s的密码:'%user_name)
            #允许两次确认密码,设置循环2次,故也无需设置计数器
            for i in range(2):
                #确认注册密码,防止用户忘记密码
                regis_pass_again=input('请确认注册用户%s的密码:'%user_name)
                # 校验注册密码
                if regis_pass_again==regis_pass:
                    # 校验密码成功,将user_name regis_pass两个变量的值写入user_list文件,并提醒用户注册成功
                    user_list.write('
    %s:%s'%(user_name,regis_pass))
                    log_file.write('
    %s:%s注册成功'%(time_now,user_name))
                    print('用户%s注册成功.....'%user_name)
                    # 退出循环
                    break
                #校验注册密码失败,进入下一次循环
                else:
                    print('33[1;33;44m密码与上次不一致.......33[0m')
            #密码确认超过两次,注册失败
            else:
                print('用户%s注册失败'%user_name)
        #输入不为y或者q,其他字符串或者回车 空格时,程序显示退出
        else:
            print('输入不符合规范,程序已退出.....')
    #将open的两个账户文件关闭,也可用with open() as xxx,open() as xxxx
    user_list.close()
    user_lock.close()
    log_file.close()
    View Code
  • 相关阅读:
    自定义Maven Archetype模板
    [Discuz!NT] Crash问题记录
    echarts渐变色实现方法
    关于windows7 IIS 7.5和Vista IIS 7.0 局域网无法访问的解决方法
    返回接口信息
    [转]简易下拉框式日期选择器(带闰平年判断)
    漂亮的验证码
    EXT.NET 使用 Ueditor编辑器,并在后台获取的方法
    WIN7 IIS不能显示特殊图片 “+”,""号的图片需要转义才可以显示
    人才网查找职位的复杂SQL用法
  • 原文地址:https://www.cnblogs.com/ccorz/p/5474352.html
Copyright © 2011-2022 走看看