python实现用户管理系统


Posted in Python onJanuary 10, 2018

本文实例为大家分享了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? Yes or No:') 
  if YN.lower()=='yes': 
   newuser(db) 
 print '\n', 
   
def deluser(db): 
 '''''删除一个用户,但必须以管理员的身份''' 
 print 'Please login as admin' #管理员的身份才能删除用户 
 name = raw_input('Login:') 
 pwd = raw_input('passwd:') 
 passwd = db.get(name) 
 if passwd == encodepass(pwd) and name=='admin': 
  user = raw_input('Please input a user name:') 
  if user != 'admin': 
   if db.pop(user): 
    print 'Delete Current!' 
  else: 
   print 'Con not delete admin!' 
 else: 
  print 'Wrong passwprd' 
  
def checkuser(db): 
 '''''查看所有用户,但必须以管理员的身份''' 
 print 'Please login as admin' #管理员的身份才能查看所有用户 
 name = raw_input('Login:') 
 pwd = raw_input('passwd:') 
 passwd = db.get(name) 
 if passwd == encodepass(pwd) and name == 'admin': 
  for key in db: 
   print 'username: %10s ====> password: %10s' % (key,db[key]) 
 else: 
  print 'You can not check all users!' 
 
def resetuser(db): 
 '''''修改密码,但必须正确的输入老密码''' 
 name = raw_input('Please input the username:') 
 passwd = raw_input('Please input old password:') 
 if db[name] == encodepass(passwd): 
  passwd = raw_input('Please input new password:') 
  db[name] = encodepass(passwd) 
 else: 
  print 'Wrong password!' 
 
def showmenu(): 
 '''''程序运行的主函数''' 
 fu = file('user.ini','r') 
 db = pickle.load(fu) 
 prompt = '''''(L)ogin Now
(Q)uit
(D)elet User
(C)heck All User
(R)eset Password
Enter choice:''' 
  
 done = False 
 while not done: 
  chosen = False 
  while not chosen: 
   try: 
    choice = raw_input(prompt).split()[0].lower() 
   except (EOFError,KeyboardInterrupt): 
    choice = 'q' 
   print '\nYou picked:[%s]' % choice 
   if choice not in 'lqdcr': 
    print 'invalid option,try again' 
   else: 
    chosen = True 
      
  if choice == 'q':done = True 
  if choice == 'l':olduser(db) 
  if choice == 'd':deluser(db) 
  if choice == 'c':checkuser(db) 
  if choice == 'r':resetuser(db) 
   
 fu = file('user.ini','w') 
 pickle.dump(db,fu,True) 
 fu.close() 
   
   
if __name__ == '__main__': 
 '''''系统有一个用户名为admin 密码为admin的超级用户,请立即修改密码!''' 
 print 'Welcome to User Information Management System!' 
 Initialization('user.ini') 
 Initialization('time.ini') 
 showmenu()

更多学习资料请关注专题《管理系统开发》。

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

Python 相关文章推荐
Python装饰器decorator用法实例
Nov 10 Python
Python迭代器和生成器介绍
Mar 06 Python
浅谈python中scipy.misc.logsumexp函数的运用场景
Jun 23 Python
Zabbix实现微信报警功能
Oct 09 Python
Python实现批量检测HTTP服务的状态
Oct 27 Python
机器学习python实战之手写数字识别
Nov 01 Python
Python实现读取txt文件并转换为excel的方法示例
May 17 Python
python利用插值法对折线进行平滑曲线处理
Dec 25 Python
对Django 转发和重定向的实例详解
Aug 06 Python
python 表格打印代码实例解析
Oct 12 Python
python selenium操作cookie的实现
Mar 18 Python
python 制作网站小说下载器
Feb 20 Python
python的Tqdm模块的使用
Jan 10 #Python
python3.6 实现AES加密的示例(pyCryptodome)
Jan 10 #Python
Python设计模式之MVC模式简单示例
Jan 10 #Python
Python设计模式之命令模式简单示例
Jan 10 #Python
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
Jan 10 #Python
Python之多线程爬虫抓取网页图片的示例代码
Jan 10 #Python
Python设计模式之观察者模式简单示例
Jan 10 #Python
You might like
apache+php完美解决301重定向的两种方法
2011/06/08 PHP
phpstudy的php版本自由修改的方法
2017/10/18 PHP
PHP操作Redis数据库常用方法示例
2018/08/25 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
2019/11/14 PHP
jscript之List Excel Color Values
2007/06/13 Javascript
JavaScript 编程引入命名空间的方法
2007/06/29 Javascript
js用图作提交按钮或超连接
2008/03/26 Javascript
js实现鼠标悬停图片上时滚动文字说明的方法
2015/02/17 Javascript
AngularJS基础教程之简单介绍
2015/09/27 Javascript
JS中的数组方法笔记整理
2016/07/26 Javascript
JS继承之借用构造函数继承和组合继承
2016/09/07 Javascript
vuex的使用及持久化state的方式详解
2018/01/23 Javascript
Vue-cli Eslint在vscode里代码自动格式化的方法
2018/02/23 Javascript
JS关于刷新页面的相关总结
2018/05/09 Javascript
一步一步的了解webpack4的splitChunk插件(小结)
2018/09/17 Javascript
JS实现的点击按钮图片上下滚动效果示例
2019/01/28 Javascript
vue实现输入一位数字转汉字功能
2019/12/13 Javascript
python定时检查启动某个exe程序适合检测exe是否挂了
2013/01/21 Python
python类继承与子类实例初始化用法分析
2015/04/17 Python
对django layer弹窗组件的使用详解
2019/08/31 Python
关于python中的xpath解析定位
2020/03/06 Python
python随机模块random的22种函数(小结)
2020/05/15 Python
L*SPACE官网:比基尼、泳装和度假服装
2019/03/18 全球购物
新电JAVA笔试题目
2014/08/31 面试题
企业内部培训方案
2014/02/04 职场文书
五年级学生评语
2014/04/22 职场文书
教师先进工作者事迹材料
2014/05/01 职场文书
中国梦读书活动总结
2014/07/10 职场文书
党员自我剖析材料
2014/08/31 职场文书
改作风抓落实促发展心得体会
2014/09/10 职场文书
毕业实习感受与体会
2015/05/26 职场文书
2015个人年度工作总结范文
2015/05/28 职场文书
孝女彩金观后感
2015/06/10 职场文书
幼儿园毕业致辞
2015/07/29 职场文书
一个家长教育孩子的心得体会
2016/01/15 职场文书
pytorch 实现在测试的时候启用dropout
2021/05/27 Python