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
原文地址:https://www.cnblogs.com/ccorz/p/5474352.html