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()

posted @ 2014-04-14 23:21  1万小时理论  阅读(181)  评论(0编辑  收藏  举报