用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()
时间: 2024-10-09 07:38:25

用python实现简单用户管理系统的相关文章

当用户管理系统遇上python和mongodb后……

Overview: 环境 前言 效果图 mongdb安装 代码涉及知识点 关于windows的cmd下执行python文件显示中文乱码的问题 总结 0.环境 操作系统:Windows Python版本:3.6.0 MongoDB版本:4.0.6 1.前言 同学们还记得,前一次小胖用python结合json文本存储实现的用户管理系统么? 注:详见「手把手教你用python实现一个简单用户管理系统」 现在小胖将这个代码进行了升级,改成用mongodb来存储用户数据.这样又能学到python操作mon

java开发简单的用户管理系统

学习完java基础后,自己练了练用MySql作为数据存储的简单用户管理系统,这是一个没有界面的管理系统,看起来比较枯燥,先给出几张截图吧. 首先预览一下包结构吧 主类是Start.java import com.menu.MainMenu; import com.nensoft.bean.Item; import com.nensoft.bean.Menu; import com.nensoft.bean.Userinfo; import com.utils.DBUtil2; public cl

Python用list和dict实现简单的用户管理系统(增、删、改、查)

#更新用户ID数组 def updateUserIDs(): global userIds userIds = [] for i in userList: userIds.append(i['id']) #添加用户 def addUser(): print('当前用户编号:') print(userIds) user = {}; while True: userId = int(input('请输入添加用户的编号:')) if userId in userIds: print('您输入的用户编号

web实践小项目&lt;一&gt;:简单日程管理系统(涉及html/css,javascript,python,sql,日期处理)

暑假自学了些html/css,javascript和python,苦于学完无处练手几乎过目即忘...最后在同学的建议下做了个简单日程管理系统.借第一版完成之际,希望能将实践期间犯过的错误和获得的新知进行整理,希望能给其他初学者提供参考,也希望有大神在浏览我粗糙的开发过程中能指出一些意见或建议. (阅读以下内容需要有一定的html/css,javascript,python和sql基础,and谢谢阅读!) 注:实践中的环境为ubuntu 14.04操作系统,python3.4(2.7实测也可行),

简单的用户管理系统

1.大二提前学了15天的servlet和jsp,看韩顺平老师的视频,做出了一个用户管理系统,虽然十分简单,但是这里面用到的知识还挺多,为以后打下基础,这个代码我觉得要熟练. 2.实现功能:实现了登录注册,用户管理的增删改查,安全退出session 3.用到的知识点:a.分页技术管理用户 b.删除session的值,返回登录界面 下面是效果展示: (1)首先建立的数据库 (2)登录界面 (3)登录成功界面 (4)用户管理----管理用户 (5)用户管理----修改用户 (6)用户管理----删除用

Python的简单介绍/解释器/变量/变量的数据类型/用户交互及流程控制(if)

一.Python的简单介绍 1.python是一门 解释型弱类型编程语言. 2.特点: 简单.明确.优雅 二.python的解释器有哪些 CPython -- 官方提供的.,内部使用c语言来实现 IPython -- IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的.好多很多国产浏览器虽然外观不同,但内核其实都是调用了IE PyPy -- PyPy是另一个Python解释器,它的

用户管理系统网站框架改进之MVC模式

从之前的用户管理系统中我们会发现,JSP主要是做界面的,但却用了JSP来对用户进行验证和分页处理,而Servlet处理页面的转跳是最快捷和最方便的,所以对用户管理系统的框架进行了改进,使用MVC模式. MVC是一种设计模式,它强制性的使应用程序的输入.处理和输出分开.使用MVC应用程序被分为三个核心部件:模型.视图和控制器.它们各自处理自己的任务. MVC的各个字母分别是M(model模型).V(view视图)和C(controller控制器) M主要由Java class来处理,也可以是Jav

Python实现简单的猜数字游戏

Python实现简单的猜数字游戏,具体如下: 随机生成一个1-10之间的数字,让用户来猜,当猜错时,会提示猜的数字是大还是小了,直到用户猜对为止. import random secret = random.randint(1,10) #print(secret) print('------猜数字游戏!-----') guess = 0 while guess != secret: temp = input('猜数字游戏开始,请输入数字:') guess = int(temp) if guess

django简单用户登陆验证

一.django简单用户登陆验证   前端页面:     <div class="container  col-lg-6  col-lg-offset-4">         <br><br><br><br><br>       <form class="form-signin col-sm-4 col-lg-offset-2" action="{% url 'login' %}