python实现用户管理系统
本文实例为大家分享了python实现用户管理系统的具体代码,供大家参考,具体内容如下
《python核心编程》第七章练习题第五题
一、题目描述
userpw2.py。下面的问题和例题7.1中的管理名字-密码的键值对数据程序有关。
(a)修改那个脚本,使他能记录用户上次的登陆日期和时间(用time模块),并与用户密码一起保存起来。程序的界面要求用户输入用户名和密码的提示。无论用户名是否登陆成功,都应有提示,在用户登陆成功后,应更新相应用户的上次登陆时间戳。如果本次登陆与上次登陆在时间上相差不超过四个小时,则通知该用户:“Youalreadyinat:
(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 importre importpickle importbase64,hashlib fromdatetimeimportdatetime defInitialization(file_name): '''''程序初始化,创建user.ini和time.ini文件''' dict_test={'admin':'db69fc039dcbd2962cb4d28f5891aae1'}#创建超级管理员,默认密码为admin f=file(file_name,'a+')#以追加的方式打开文件,避免文件被修改 iflen(f.readlines())==0:#判断程序是否为空,只在第一次运行的时候初始化 iffile_name=='user.ini': pickle.dump(dict_test,f,True) else: pickle.dump({},f,True) f.close() defencodepass(passwd): '''''采用base64和md5双层加密,破解可能几乎为0''' m=hashlib.md5() pwd=base64.b64encode(passwd) m.update(pwd) returnm.hexdigest() deftime_order(user): '''''记录用户登陆时间,结果保存在time.ini文件中''' ft=file('time.ini','r') dbt=pickle.load(ft) ifusernotindbt: dbt.setdefault(user,datetime.today()) else: time_value=dbt[user] t=datetime.today()-time_value try: ift.hour<=4: print'Youalreadyloggedinat:' except: print'Youalreadyloggedinat: ' dbt[user]=datetime.today() ft=file('time.ini','w') pickle.dump(dbt,ft,True) ft.close() defnewuser(db): '''''用户创建程序,由olduser调用''' whileTrue: name=raw_input('Pleaseinputtheusername:') ifre.match(r'\w',name):#采用正则表达式检测用户名是否合法 pass else: print'UsernameshouldbemadeofA~Z、a~z、0~9、_' continue forvaluenameindb.keys(): ifname.lower()==valuename.lower(): break else: break passwd=raw_input('Pleaseinputthepassword:') db[name]=encodepass(passwd) defolduser(db): '''''用户登陆程序''' name=raw_input('Login:') ifnameindb: pwd=raw_input('passwd:') passwd=db.get(name) ifpasswd==encodepass(pwd): print'Welcomeback!',name time_order(name) else: print'Loginincorrent!' else: YN=raw_input('Doyouwanttoinsteadanewuser?YesorNo:') ifYN.lower()=='yes': newuser(db) print'\n', defdeluser(db): '''''删除一个用户,但必须以管理员的身份''' print'Pleaseloginasadmin'#管理员的身份才能删除用户 name=raw_input('Login:') pwd=raw_input('passwd:') passwd=db.get(name) ifpasswd==encodepass(pwd)andname=='admin': user=raw_input('Pleaseinputausername:') ifuser!='admin': ifdb.pop(user): print'DeleteCurrent!' else: print'Connotdeleteadmin!' else: print'Wrongpasswprd' defcheckuser(db): '''''查看所有用户,但必须以管理员的身份''' print'Pleaseloginasadmin'#管理员的身份才能查看所有用户 name=raw_input('Login:') pwd=raw_input('passwd:') passwd=db.get(name) ifpasswd==encodepass(pwd)andname=='admin': forkeyindb: print'username:%10s====>password:%10s'%(key,db[key]) else: print'Youcannotcheckallusers!' defresetuser(db): '''''修改密码,但必须正确的输入老密码''' name=raw_input('Pleaseinputtheusername:') passwd=raw_input('Pleaseinputoldpassword:') ifdb[name]==encodepass(passwd): passwd=raw_input('Pleaseinputnewpassword:') db[name]=encodepass(passwd) else: print'Wrongpassword!' defshowmenu(): '''''程序运行的主函数''' fu=file('user.ini','r') db=pickle.load(fu) prompt='''''(L)oginNow (Q)uit (D)eletUser (C)heckAllUser (R)esetPassword Enterchoice:''' done=False whilenotdone: chosen=False whilenotchosen: try: choice=raw_input(prompt).split()[0].lower() except(EOFError,KeyboardInterrupt): choice='q' print'\nYoupicked:[%s]'%choice ifchoicenotin'lqdcr': print'invalidoption,tryagain' else: chosen=True ifchoice=='q':done=True ifchoice=='l':olduser(db) ifchoice=='d':deluser(db) ifchoice=='c':checkuser(db) ifchoice=='r':resetuser(db) fu=file('user.ini','w') pickle.dump(db,fu,True) fu.close() if__name__=='__main__': '''''系统有一个用户名为admin密码为admin的超级用户,请立即修改密码!''' print'WelcometoUserInformationManagementSystem!' Initialization('user.ini') Initialization('time.ini') showmenu()
更多学习资料请关注专题《管理系统开发》。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。