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脚本设置系统时间的两种方法
Feb 21 Python
浅谈django model postgres的json字段编码问题
Jan 05 Python
1 行 Python 代码快速实现 FTP 服务器
Jan 25 Python
Python tkinter label 更新方法
Oct 11 Python
django之跨表查询及添加记录的示例代码
Oct 16 Python
浅谈python常用程序算法
Mar 22 Python
Python3 sys.argv[ ]用法详解
Oct 24 Python
Python实现图片裁剪的两种方式(Pillow和OpenCV)
Oct 30 Python
opencv resize图片为正方形尺寸的实现方法
Dec 26 Python
基于python实现操作git过程代码解析
Jul 27 Python
浅析python中的del用法
Sep 02 Python
python 批量压缩图片的脚本
Jun 02 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
linux下删除7天前日志的代码(php+shell)
2011/01/02 PHP
解析file_get_contents模仿浏览器头(user_agent)获取数据
2013/06/27 PHP
PHP中通过fopen()函数访问远程文件示例
2014/11/18 PHP
Gird事件机制初级读本
2007/03/10 Javascript
用正则表达式 动态创建/增加css style script 兼容IE firefox
2009/03/10 Javascript
javascript中onmouse事件在div中失效问题的解决方法
2012/01/09 Javascript
有关javascript的性能优化 (repaint和reflow)
2013/04/12 Javascript
js浮动图片的动态效果
2013/07/10 Javascript
jquery插件推荐浏览器嗅探userAgent
2014/11/09 Javascript
javascript实现复选框选中属性
2015/03/25 Javascript
jQuery实现将页面上HTML标签换成另外标签的方法
2015/06/09 Javascript
不间断循环滚动效果的实例代码(必看篇)
2016/10/08 Javascript
用Vue.js实现监听属性的变化
2016/11/17 Javascript
基于Vuejs和Element的注册插件的编写方法
2017/07/03 Javascript
AngularJS select设置默认值的实现方法
2017/08/25 Javascript
微信小程序使用request网络请求操作实例
2017/12/15 Javascript
Node层模拟实现multipart表单的文件上传示例
2018/01/02 Javascript
vue-router传递参数的几种方式实例详解
2018/11/13 Javascript
Vue中的基础过渡动画及实现原理解析
2018/12/04 Javascript
微信小程序实现简易table表格
2020/06/19 Javascript
vuex actions异步修改状态的实例详解
2019/11/06 Javascript
jQuery实现数字华容道小游戏(实例代码)
2020/01/16 jQuery
[01:03:56]Mineski vs TNC 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
linux系统使用python获取内存使用信息脚本分享
2014/01/15 Python
Python发送Email方法实例
2014/08/21 Python
Python 2.x如何设置命令执行的超时时间实例
2017/10/19 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
2017/10/25 Python
Python实现计算字符串中出现次数最多的字符示例
2019/01/21 Python
Numpy与Pytorch 矩阵操作方式
2019/12/27 Python
pip安装tensorflow的坑的解决
2020/04/19 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
2020/07/09 Python
CSS3之transition实现下划线的示例代码
2018/05/30 HTML / CSS
香港艺人陈冠希创办的潮流品牌:JUICESTORE
2021/03/04 全球购物
大学生党员自我剖析材料
2014/10/06 职场文书
街道办残联2016年助残日活动总结
2016/04/01 职场文书
css背景和边框标签实例详解
2021/05/21 HTML / CSS