PYTHON核心编程第7章 7.5题
!/usr/bin/env python
coding=utf-8
import time #用于计算时间
import base64 #用于简单的字符加密
import getpass #用于获取控制台输入的模块
import os
db = {}
def deluser():
"""
这是一个删除用户方法,判断字典中是否存在这个用户后进行删除操作
"""
prompt = raw_input('input username: ').strip().lower()
if prompt in db.keys():
del db[prompt]
print '%s is deleted' % (prompt)
else:
print "user %s is not exsts" % ( prompt )
def showuser():
"""
简单的遍历一下字典的key
"""
print "There have %s users in system" % (len(db.keys()))
for key in db.keys():
print key
def newuser():
"""
添加用户的方法,中间使用了base64进行简单的字符串加密
将生成的用户密码和当前的时间放入到列表中
"""
prompt = 'login desired: '
while True:
name = raw_input(prompt).strip().lower()
if db.has_key(name):
prompt = 'name taken, try another: '
else:
break
#pwd = raw_input('passwd: ')
pwd = getpass.getpass('passwd: ')
# 生成{name:[passwd,time]}这种格式
db[name] = [base64.b64encode(pwd),time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())]
print 'your base64 passwd is %s ' % (db[name])
print '*' * 30
print db
def login():
"""
判断老用户的方法,其中最主要的是做了两个事情,1是 时间戳转换
2是字用户输入的字符串进行解密对比
对原方法进行了更改,当前的主要功能如下:
1. 当用户输入一个不存在的用户时,提示是否创建
2. 当用户选择创建成功后,回到主界面
3. 如果输入的是存在的用户,则开始登录
"""
name = raw_input('login: ').strip().lower()
while True:
if name not in db:
Nuser = raw_input("Creat New User? (Y/N) :")
if Nuser.lower() == 'y':
pwd = getpass.getpass('passwd: ')
db[name] = [base64.b64encode(pwd),time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())]
print 'your base64 passwd is %s ' % (db[name])
print '*' * 30
print db
break
else:
break
#pwd = raw_input('passwd: ')
pwd = getpass.getpass('passwd: ')
passwd = base64.b64decode(db.get(name)[0])
last_login = db[name][1]
last_login_tap = time.mktime(time.strptime(last_login,'%Y-%m-%d %H:%M:%S'))
#如果本次登录的时间与上次登录时间间隔4小时将会更新上次登录时间
if passwd == pwd:
now_time_tap = time.time()
if (now_time_tap - last_login_tap)/3600 < 4:
print "You already logged in at: %s" % (last_login)
else:
print 'welcome back %s, you last login time %s' % ( name ,last_login )
last_login = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
break
else:
print 'login incorrect'
break
def showmenu():
os.system('cls')
prompt = """
(U)ser Login
(D)el user
(S)how users
(Q)uit
Enter choice: """
done = False
while not done:
chosen = False
while not chosen:
try:
choice = raw_input(prompt).strip()[0].lower()
except (EOFError,KeyboardInterrupt):
choice = 'q'
print '\nYou picked: [%s]' % choice
if choice not in 'udsq':
print 'invalid option,try again'
else:
chosen = True
if choice == 'q' : done = True
if choice == 'u' : login()
if choice == 'd' : deluser()
if choice == 's' : showuser()
if name == 'main':
showmenu()