- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PythOn
PythOn管理系统系列
第
第 PAGE #页共5页
PythOn实现用户管理系统
一、 题目描述
USerPW2.pya下面的问题和例题7.1中的管理划字-密码的键值对数据程序有关。
修改那个脚本,使他能记录用户上次的登陆日期和时间(用廿me模块),并与用户密码 一起保存起来。程序的界而要求用户输入用户划和密码的提示。无论用户名是否登陆成功, 都应有提示,在用户登陆成功后,应更新相应用户的上次登陆时间戳。如果本次登陆与上次 登陆在时间上相差不超过四个小时,则通知该用户:You already in at:lastjogin-timestamp ,?
添加一个岳理菜单,其中有以下两项:(1)删除一个用户(2)显示系统中所有用户的 名字和他们密码的淸单。
(C) 口令目前没有加密。请添加一段对口令加密的代码
为程序添加图形界面,例如,用TkinterO (图形化界面开发比较复杂,这里没有用到。)
要求用户划布区分大小写。
加强对用户名的限制,不允许符号和空白符。
合并“新用户”和“老用户”两个选项。如果一个新用户试图用一个不存在的用户名登 陆,询问该用户是否是新用户,如果是肯泄的,就创建该用户。否则按老用户的方式登陆。
二、 程序中用到的模块,解释如下:
(l)re:正则表达式引擎,PythOn中调用正则表达式的方法
⑵pickle:对象持久化,将数据写入到磁盘中
(3) datetime:时间处理,用于记录用户登陆时间戳
⑷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文件小 dict3θst={,admin,ι,db69fc039dcbd2962cb4d28f5891aael,} #创建超级管理员 默认密码为 admin
f = file(file-name,,a+) #以追加的方式打开文件,避免文件被修改
if len(f.readlines()) ==0: #判断程序是否为空,只在第一次运行的时候初始化
if file-name==,user.i nil
PiCkIe.dump(cIiCteteStZ f, TrUe)
else:
PiCkle.dump({}Λ TrUe)
f.close()
def Gn COdePaSS(PaSSWd):
采用base64和md5双层加密,破解可能几乎为0,
m = hashlib.md5()
PWd = base64.b64encode(passwd)
m.update(pwd)
return m.he×digest()
def time_Order(User):
””记录用户登陆时间,结果保存在time.ini文件中”’
ft = file(,time.ini,∕rl)
dbt = PiCkle.load(ft)
if USer not in dbt:
dbt.setdefault(userzdatetime.today{))
else:
time-value = dbt[user]
t = datetime.today()-time_VaIUe
try:
if t.hour=4:
Print You already IOgged in at:last」ogin-timestamp, except:
Print ,You already IOgged in atzlastjogin-timestamp, dbt[user] = datetime.today()
ft = file(,time.ini,∕wl)
PiCkIe.dump(dbt, ft, TrUe)
ft.close()
def n ewuser(db):
用户创建程序,由OldUSer调用
WhiIe True:
name = rawjnput(,Please inPUt the username:1)
if re.match(r,?w,, name): #采用正则表达式检测用户名是否合法
PaSS
else:
Print ,USername should be made of A~Z、a~z、0zv9
COntinUe
for value name in db.keys():
if name」oWero == ValUename」ower{):
break
else:
break
PaSSWd = rawjnput(,P
文档评论(0)