简单的python后台管理程序


Posted in Python onApril 13, 2017

一、作业需求

 简单的python后台管理程序

简单的python后台管理程序

二、流程图

简单的python后台管理程序

三、源码与具体思路

import shutil
import os
import sys


USER_LOGIN = {'is_login': False}

def outer(func):     #装饰器,若没有登陆则输出“请登陆”
 def inner(*args, **kwargs):
  if USER_LOGIN['is_login']:
   r = func(*args, **kwargs)
   return r
  else:
   print("请登陆")
 return inner


def outer1(func):     #装饰器,若不是管理员则输出“权限不足”
 def inner1(*args, **kwargs):
  if USER_LOGIN['user_type'] == '2':
   r = func(*args, **kwargs)
   return r
  else:
   print("不是管理员,权限不足")
 return inner1


@outer
def change_pwd(changed_user, changed_pwd, type_user):   #修改密码
 if type_user == '1':
  print("欢迎%s修改密码".center(50, '-') % USER_LOGIN['current_user'])
  with open('regist', 'r', encoding='utf-8') as f1, open('regist_new', 'w', encoding='utf-8') as f2:
   for line in f1:
    read_list = line.strip().split('|')
    if read_list[0] == changed_user:
     read_list[1] = changed_pwd
     f2.write('|'.join(read_list) + '\n')
     continue

    f2.write(line)
  shutil.move('regist', 'regist_bak') #把regist文件复制到regist_bak文件中去
  os.rename('regist_new', 'regist') #再将regist_new改名为regist 妙妙妙!
 else:
  print("没有权限修改管理员密码")



@outer
def look_information(): #查看本用户信息
 print("欢迎%s查看信息".center(50, '-') % USER_LOGIN['current_user'])
 with open('regist', 'r+', encoding='utf-8') as f:
  for line in f:
   read_list = line.strip().split('|')
   if read_list[0] == USER_LOGIN['current_user']:
    print("用户名:%s" % read_list[0])
    print("密码:%s" % read_list[1])
    print("邮箱:%s" % read_list[2])
    print("电话:%s" % read_list[3])



def login(user, pwd):   #登陆
 with open('regist', 'r+', encoding='utf-8') as f:
  for line in f:
   read_list = line.strip().split('|')
   if read_list[0] == user and read_list[1] == pwd: #若用户存在
    USER_LOGIN['is_login'] = True
    USER_LOGIN['current_user'] = user
    USER_LOGIN['user_type'] = read_list[-1]
    print("欢迎%s登陆".center(50, '-') % USER_LOGIN['current_user'])
    break

 if not USER_LOGIN['is_login']: #若用户还没注册
  print("用户不存在,请注册")



def register(reg_user, reg_pwd, reg_email, reg_phone): #注册
 register_list = []
 register_list.append(reg_user) #将用户信息加入列表
 register_list.append(reg_pwd)
 register_list.append(reg_email)
 register_list.append(reg_phone)
 register_list.append('1')
 with open('regist', 'a', encoding='utf-8') as f: #将用户信息写入文件
  li = '|'.join(register_list)
  f.write(li + '\n')

 print("注册/添加信息:", li)




def delete_func(dele_user, type_user): #删除普通用户
 if type_user == '1': #若删除的是普通用户
  exit_flag = False
  with open('regist', 'r+', encoding='utf-8') as f1, open('regist_new', 'w', encoding='utf-8') as f2:
   for line in f1:
    ret_list = line.strip().split('|')
    if ret_list[0] == dele_user:
     exit_flag = True  #标志位原本设为False,当找到相应用户删除后,标志位设为True
     print("普通用户删除成功")
     continue
    f2.write(line)
  shutil.move('regist', 'regist_bak')
  os.rename('regist_new', 'regist')

  if not exit_flag:
   print("要删除普通用户不存在")
 elif type_user == '2': #若删除的是管理员用户
  print("没有权限删除管理员帐号")



def upper_level(upper_user): #升级为管理员
 with open('regist', 'r+', encoding='utf-8') as f1, open('regist_new', 'w', encoding='utf-8') as f2:
  for line in f1:
   li = line.strip().split('|')
   if li[0] == upper_user:
    li[-1] = '2'
    print("%s已成为管理员" % upper_user)
    f2.write('|'.join(li) + '\n')
    continue
   f2.write(line)

 shutil.move('regist', 'regist_bak')
 os.rename('regist_new', 'regist')



def search(search_info):  #简单搜索
 with open('regist', 'r+', encoding='utf-8') as f:
  for line in f:
   ret_list = line.strip().split('|')
   if search_info in ret_list:
    print(ret_list)



def get_usertype(user):  #通地用户名获得用户类型,返回1或2
 with open('regist', 'r+', encoding='utf-8') as f:
  for line in f:
   li = line.strip().split('|')
   if li[0] == user:
    return li[-1]  #返回帐号的类型 1或2



@outer1
def admin_user():   #管理员调用
 num = input("请选择:1.修改密码;2.查看本用户信息;3.修改普通用户密码;"
    "4.删除/添加普通用户;5.权限管理;6.关键字搜索普通用户信息;7.退出:")
 if num == '1':
  new_pwd = input("请输入新的密码:")
  change_pwd(new_pwd)
 elif num == '2':
  look_information()
 elif num == '3':
  user_changed = input("请输入修改密码的用户名:")
  type_user = get_usertype(user_changed)
  new_pwd = input("请输入新的密码:")
  change_pwd(user_changed, new_pwd, type_user)
 elif num == '4':
  add_or_dele = input("1.删除普通用户;2.添加普通用户")
  if add_or_dele == '1':
   delete_username = input("请输入要删除普通用户的用户名:")
   type_user = get_usertype(delete_username)
   delete_func(delete_username, type_user)
  elif add_or_dele == '2':
   regi_username = input("请输入注册用户名:")
   regi_pwd = input("请输入注册密码:")
   regi_email = input("请输入邮箱:")
   regi_phone = input("请输入电话:")
   register(regi_username, regi_pwd, regi_email, regi_phone)
 elif num == '5':
  upper_user = input("请输入升级为管理员的普通用户名:")
  upper_level(upper_user)

 elif num == '6':
  search_information = input("请输入要查找的关键字:")
  search(search_information)
 elif num == '7':
  sys.exit()





def main():

 while True:
  choice = input("请选择:1.登陆;2.注册;3.修改密码;4.查看信息;5.后台管理;6.退出:")
  if choice == '1':
   username = input("请输入用名名:")
   password = input("请输入密码:")
   login(username, password)
  elif choice == '2':
   regi_username = input("请输入注册用户名:")
   regi_pwd = input("请输入注册密码:")
   regi_email = input("请输入邮箱:")
   regi_phone = input("请输入电话:")
   register(regi_username, regi_pwd,regi_email,regi_phone)
   print("注册成功".center(50, '*'))
  elif choice == '3':
   new_pwd = input("请输入新的密码:")
   current_user = USER_LOGIN['current_user']
   change_pwd(current_user, new_pwd)
   print("修改密码成功,请重新登陆".center(50, '-'))
   sys.exit()
  elif choice == '4':
   look_information()
  elif choice == '5':
   admin_user()
  elif choice == '6':
   sys.exit()


main()

为了方便,再贴下不折叠代码

@outer1
def admin_user():   #管理员调用
 num = input("请选择:1.修改密码;2.查看本用户信息;3.修改普通用户密码;"
          "4.删除/添加普通用户;5.权限管理;6.关键字搜索普通用户信息;7.退出:")
 if num == '1':
  new_pwd = input("请输入新的密码:")
  change_pwd(new_pwd)
 elif num == '2':
  look_information()
 elif num == '3':
  user_changed = input("请输入修改密码的用户名:")
  type_user = get_usertype(user_changed)
  new_pwd = input("请输入新的密码:")
  change_pwd(user_changed, new_pwd, type_user)
 elif num == '4':
  add_or_dele = input("1.删除普通用户;2.添加普通用户")
  if add_or_dele == '1':
   delete_username = input("请输入要删除普通用户的用户名:")
   type_user = get_usertype(delete_username)
   delete_func(delete_username, type_user)
  elif add_or_dele == '2':
   regi_username = input("请输入注册用户名:")
   regi_pwd = input("请输入注册密码:")
   regi_email = input("请输入邮箱:")
   regi_phone = input("请输入电话:")
   register(regi_username, regi_pwd, regi_email, regi_phone)
 elif num == '5':
  upper_user = input("请输入升级为管理员的普通用户名:")
  upper_level(upper_user)

 elif num == '6':
  search_information = input("请输入要查找的关键字:")
  search(search_information)
 elif num == '7':
  sys.exit()

 

 

def main():

 while True:
  choice = input("请选择:1.登陆;2.注册;3.修改密码;4.查看信息;5.后台管理;6.退出:")
  if choice == '1':
   username = input("请输入用名名:")
   password = input("请输入密码:")
   login(username, password)
  elif choice == '2':
   regi_username = input("请输入注册用户名:")
   regi_pwd = input("请输入注册密码:")
   regi_email = input("请输入邮箱:")
   regi_phone = input("请输入电话:")
   register(regi_username, regi_pwd,regi_email,regi_phone)
   print("注册成功".center(50, '*'))
  elif choice == '3':
   new_pwd = input("请输入新的密码:")
   current_user = USER_LOGIN['current_user']
   change_pwd(current_user, new_pwd)
   print("修改密码成功,请重新登陆".center(50, '-'))
   sys.exit()
  elif choice == '4':
   look_information()
  elif choice == '5':
   admin_user()
  elif choice == '6':
   sys.exit()

main()

四、坑总结

1.怎么修改密码?

当时我蒙了。因为如果用f.write(xx),是直接写在文件的最后面的。这样我想,好吧写在最后面也行。

但将已修改密码的记录加在最后一行,那又怎么把原来的删掉?又多了一个麻烦。

或者说,不加在最后一行,直接改那一行,又怎么做?

shutil.move('regist', 'regist_bak') 
#把regist文件复制到regist_bak文件中去
os.rename('regist_new', 'regist') 
#再将regist_new改名为regist   妙妙妙!

2.怎么修改用户user_type(将1改为2)

我看到有的博客有replace()方法。
new_str = line.replace(read_list[1], changed_pwd) 刚开始我也用了,但是,后来有BUG!
比如:当用户名与密码一样是,修改密码时,把密码也修改了。还不止,用replace()方法,在改
user_type时也出现把用户名等修改的现象。当时我再次蒙比。这不科学!
后来仔细看了replace()的源码才发现我错了。
也可以看看Python replace()方法

3.当我登入管理员后,添加普通用户后,发现不能再次登入管理员了。

于是我回去看register(reg_user, reg_pwd, reg_email, reg_phone),
发现我滥用全局变量

USER_LOGIN['user_type'] = '1'
register_list.append(USER_LOGIN['user_type'])

原来这里我重新赋值USER_LOGIN['user_type'] = '1'

后来为了解决这类问题,写了个get_user_type()方法

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

Python 相关文章推荐
跟老齐学Python之编写类之四再论继承
Oct 11 Python
Python的Django框架中的数据库配置指南
Jul 17 Python
浅谈Python实现贪心算法与活动安排问题
Dec 19 Python
Python将多个excel表格合并为一个表格
Feb 22 Python
python绘制多个曲线的折线图
Mar 23 Python
详解如何为eclipse安装合适版本的python插件pydev
Nov 04 Python
配置 Pycharm 默认 Test runner 的图文教程
Nov 30 Python
Python之使用adb shell命令启动应用的方法详解
Jan 07 Python
关于python多重赋值的小问题
Apr 17 Python
Pandas对每个分组应用apply函数的实现
Dec 13 Python
Python爬取某平台短视频的方法
Feb 08 Python
python脚本框架webpy的url映射详解
Nov 20 Python
python算法表示概念扫盲教程
Apr 13 #Python
Python常用算法学习基础教程
Apr 13 #Python
视觉直观感受若干常用排序算法
Apr 13 #Python
python常见排序算法基础教程
Apr 13 #Python
python编程实现希尔排序
Apr 13 #Python
python实现解数独程序代码
Apr 12 #Python
python访问抓取网页常用命令总结
Apr 11 #Python
You might like
PHP GD 图像处理组件的常用函数总结
2010/04/28 PHP
linux下使用crontab实现定时PHP计划任务失败的原因分析
2014/07/05 PHP
PHPCMS忘记后台密码的解决办法
2016/10/30 PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
2018/09/16 PHP
改进UCHOME的记录发布,增强可访问性用户体验
2011/01/17 Javascript
Javascript操作cookie的函数代码
2012/10/03 Javascript
javascript实现div的拖动并调整大小类似qq空间个性编辑模块
2012/12/12 Javascript
浅析创建javascript对象的方法
2016/05/13 Javascript
jQuery数据检索中根据关键字快速定位GridView指定行的实现方法
2016/06/08 Javascript
vue实现可增删查改的成绩单
2016/10/27 Javascript
EasyUI 结合JS导出Excel文件的实现方法
2016/11/10 Javascript
简单谈谈原生js的math对象
2017/06/27 Javascript
nodejs后台集成ueditor富文本编辑器的实例
2017/07/11 NodeJs
深入浅析vue组件间事件传递
2017/12/29 Javascript
VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip
2018/11/30 Javascript
微信小程序实现的日期午别医生排班表功能示例
2019/01/09 Javascript
vue实现简单学生信息管理
2020/05/30 Javascript
Python实现的二维码生成小软件
2014/07/11 Python
从源码解析Python的Flask框架中request对象的用法
2016/06/02 Python
浅析Python中的for 循环
2016/06/09 Python
python中reduce()函数的使用方法示例
2017/09/29 Python
python远程连接服务器MySQL数据库
2018/07/02 Python
Python实现获取本地及远程图片大小的方法示例
2018/07/21 Python
Selenium(Python web测试工具)基本用法详解
2018/08/10 Python
Python解析Excle文件中的数据方法
2018/10/23 Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
2019/06/27 Python
python实现扫雷游戏
2020/03/03 Python
Keras实现将两个模型连接到一起
2020/05/23 Python
让你相见恨晚的十个Python骚操作
2020/11/18 Python
动物科学专业毕业生的自我评价
2013/11/29 职场文书
化学专业自荐信
2014/05/28 职场文书
机械设计制造及其自动化专业求职信
2014/06/17 职场文书
人事行政助理岗位职责
2015/04/11 职场文书
二审代理词范文
2015/05/25 职场文书
个人售房合同协议书
2016/03/21 职场文书
《时代广场的蟋蟀》读后感:真挚友情,温暖世界!
2020/01/08 职场文书