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 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:<last_login_timestamp>' except: print'Youalreadyloggedinat:<last_login_timestamp>' 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()
看完了这篇文章,相信你对“python实现用户管理系统的方法”有了一定的了解,如果想了解更多相关知识,欢迎关注恰卡编程网行业资讯频道,感谢各位的阅读!
推荐阅读
-
Python中怎么动态声明变量赋值
这篇文章将为大家详细讲解有关Python中怎么动态声明变量赋值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文...
-
python中变量的存储原理是什么
-
Python中怎么引用传递变量赋值
这篇文章将为大家详细讲解有关Python中怎么引用传递变量赋值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文...
-
python中怎么获取程序执行文件路径
python中怎么获取程序执行文件路径,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的...
-
Python中如何获取文件系统的使用率
Python中如何获取文件系统的使用率,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴...
-
Python中怎么获取文件的创建和修改时间
这篇文章将为大家详细讲解有关Python中怎么获取文件的创建和修改时间,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读...
-
python中怎么获取依赖包
今天就跟大家聊聊有关python中怎么获取依赖包,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据...
-
python怎么实现批量文件加密功能
-
python中怎么实现threading线程同步
小编给大家分享一下python中怎么实现threading线程同步,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!...
-
python下thread模块创建线程的方法
本篇内容介绍了“python下thread模块创建线程的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来...