python实现用户管理系统

(编辑:jimmy 日期: 2024/10/1 浏览:2)

本文实例为大家分享了python实现用户管理系统的具体代码,供大家参考,具体内容如下

《python核心编程》第七章练习题第五题

一、题目描述

 userpw2.py。下面的问题和例题7.1中的管理名字-密码的键值对数据程序有关。

(a) 修改那个脚本,使他能记录用户上次的登陆日期和时间(用time模块),并与用户密码一起保存起来。程序的界面要求用户输入用户名和密码的提示。无论用户名是否登陆成功,都应有提示,在用户登陆成功后,应更新相应用户的上次登陆时间戳。如果本次登陆与上次登陆在时间上相差不超过四个小时,则通知该用户:“You already in at :<last_login_timestamp>”。

(b) 添加一个管理菜单,其中有以下两项:(1)删除一个用户 (2)显示系统中所有用户的名字和他们密码的清单。

(c) 口令目前没有加密。请添加一段对口令加密的代码

(d) 为程序添加图形界面,例如,用Tkinter。(图形化界面开发比较复杂,这里没有用到。)

(e) 要求用户名布区分大小写。

(f ) 加强对用户名的限制,不允许符号和空白符。

(g) 合并“新用户”和“老用户”两个选项。如果一个新用户试图用一个不存在的用户名登陆,询问该用户是否是新用户,如果是肯定的,就创建该用户。否则按老用户的方式登陆。

二、程序中用到的模块,解释如下:

(1) re:正则表达式引擎,python中调用正则表达式的方法

(2) pickle:对象持久化,将数据写入到磁盘中

(3) datetime:时间处理,用于记录用户登陆时间戳

(4) base64:base64加密模块

(5) hashlib:hash加密模块 

完整代码:

#-*- coding:utf-8 -*- 
#2017.7.17
 
import re 
import pickle 
import base64,hashlib 
from datetime import datetime 
 
def Initialization(file_name): 
 '''''程序初始化,创建user.ini和time.ini文件''' 
 dict_test={'admin':'db69fc039dcbd2962cb4d28f5891aae1'} #创建超级管理员,默认密码为admin 
 f = file(file_name,'a+') #以追加的方式打开文件,避免文件被修改 
 if len(f.readlines()) ==0: #判断程序是否为空,只在第一次运行的时候初始化 
  if file_name=='user.ini': 
   pickle.dump(dict_test, f, True) 
  else: 
   pickle.dump({},f, True) 
 f.close() 
 
def encodepass(passwd): 
 '''''采用base64和md5双层加密,破解可能几乎为0''' 
 m = hashlib.md5() 
 pwd = base64.b64encode(passwd) 
 m.update(pwd) 
 return m.hexdigest() 
 
def time_order(user): 
 '''''记录用户登陆时间,结果保存在time.ini文件中''' 
 ft = file('time.ini','r') 
 dbt = pickle.load(ft) 
 if user not in dbt: 
  dbt.setdefault(user,datetime.today()) 
 else: 
  time_value = dbt[user] 
  t = datetime.today()-time_value 
  try: 
   if t.hour<=4: 
    print 'You already logged in at:<last_login_timestamp>' 
  except: 
   print 'You already logged in at:<last_login_timestamp>' 
  dbt[user] = datetime.today() 
 ft = file('time.ini','w') 
 pickle.dump(dbt, ft, True) 
 ft.close() 
   
 
def newuser(db): 
 '''''用户创建程序,由olduser调用''' 
 while True: 
  name = raw_input('Please input the username:') 
  if re.match(r'\w', name): #采用正则表达式检测用户名是否合法 
   pass 
  else: 
   print 'Username should be made of A~Z、a~z、0~9、_' 
   continue 
  for valuename in db.keys(): 
   if name.lower() == valuename.lower(): 
    break 
  else: 
   break 
 passwd = raw_input('Please input the password:') 
 db[name] = encodepass(passwd) 
  
def olduser(db): 
 '''''用户登陆程序''' 
 name = raw_input('Login:') 
 if name in db: 
  pwd = raw_input('passwd:') 
  passwd = db.get(name) 
  if passwd == encodepass(pwd): 
   print 'Welcome back!',name 
   time_order(name) 
  else: 
   print 'Login incorrent!' 
 else: 
  YN = raw_input('Do you want to instead a new user"_blank" href="https://www.jb51.net/Special/983.htm">管理系统开发》。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

一句话新闻
一文看懂荣耀MagicBook Pro 16
荣耀猎人回归!七大亮点看懂不只是轻薄本,更是游戏本的MagicBook Pro 16.
人们对于笔记本电脑有一个固有印象:要么轻薄但性能一般,要么性能强劲但笨重臃肿。然而,今年荣耀新推出的MagicBook Pro 16刷新了人们的认知——发布会上,荣耀宣布猎人游戏本正式回归,称其继承了荣耀 HUNTER 基因,并自信地为其打出“轻薄本,更是游戏本”的口号。
众所周知,寻求轻薄本的用户普遍更看重便携性、外观造型、静谧性和打字办公等用机体验,而寻求游戏本的用户则普遍更看重硬件配置、性能释放等硬核指标。把两个看似难以相干的产品融合到一起,我们不禁对它产生了强烈的好奇:作为代表荣耀猎人游戏本的跨界新物种,它究竟做了哪些平衡以兼顾不同人群的各类需求呢?