简单的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中下划线的使用方法
Mar 27 Python
Python字典简介以及用法详解
Nov 15 Python
Python简单网络编程示例【客户端与服务端】
May 26 Python
python编程通过蒙特卡洛法计算定积分详解
Dec 13 Python
python3+PyQt5实现自定义分数滑块部件
Apr 24 Python
python爬虫正则表达式之处理换行符
Jun 08 Python
对python中矩阵相加函数sum()的使用详解
Jan 28 Python
Python docx库用法示例分析
Feb 16 Python
解决Python中定时任务线程无法自动退出的问题
Feb 18 Python
基于python实现把json数据转换成Excel表格
May 07 Python
Pytorch环境搭建与基本语法
Jun 03 Python
python 中关于pycharm选择运行环境的问题
Oct 31 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类
2006/11/25 PHP
Thinkphp 空操作、空控制器、命名空间(详解)
2017/05/05 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
PHP PDOStatement::columnCount讲解
2019/01/30 PHP
父窗口获取弹出子窗口文本框的值
2006/06/27 Javascript
setTimeout 不断吐食CPU的问题分析
2009/04/01 Javascript
jQuery 删除或是清空某个HTML元素示例
2014/08/04 Javascript
javascript 回调函数详解
2014/11/11 Javascript
jQuery Validate表单验证入门学习
2015/12/18 Javascript
webpack+vue.js快速入门教程
2016/10/12 Javascript
3种不同的ContextMenu右键菜单实现代码
2016/11/03 Javascript
Bootstrap选项卡动态切换效果
2016/11/28 Javascript
node koa2实现上传图片并且同步上传到七牛云存储
2017/07/31 Javascript
利用javascript如何随机生成一定位数的密码
2017/09/22 Javascript
Vue多组件仓库开发与发布详解
2019/02/28 Javascript
微信小程序通过一个json实现分享朋友圈图片
2019/09/03 Javascript
[50:12]EG vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python逐行读取文件内容的三种方法
2014/01/20 Python
python连接字符串的方法小结
2015/07/13 Python
Tensorflow使用支持向量机拟合线性回归
2018/09/07 Python
Python 做曲线拟合和求积分的方法
2018/12/29 Python
python3+selenium自动化测试框架详解
2019/03/17 Python
python ftplib模块使用代码实例
2019/12/31 Python
Python实现读取并写入Excel文件过程解析
2020/05/27 Python
Python3 用什么IDE开发工具比较好
2020/11/28 Python
详解如何用canvas画一个微笑的表情
2019/03/14 HTML / CSS
全球最大运动品牌的男装、女装和童装官方库存商:A&A Sports
2021/01/17 全球购物
描述内存分配方式以及它们的区别
2016/10/15 面试题
教师岗位职责范本
2013/12/29 职场文书
幼儿园家长会欢迎词
2014/01/09 职场文书
小学生打架检讨书
2014/01/26 职场文书
消防器材管理制度
2014/01/28 职场文书
事业单位考核材料
2014/05/21 职场文书
电子信息工程自荐信
2014/05/26 职场文书
四风问题个人自查剖析材料思想汇报
2014/09/21 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/09/30 职场文书