侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

简单的python后台管理程序

Python  /  管理员 发布于 7年前   271

一、作业需求

 

二、流程图

三、源码与具体思路

 import shutilimport osimport sysUSER_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 innerdef outer1(func):     #装饰器,若不是管理员则输出“权限不足” def inner1(*args, **kwargs):  if USER_LOGIN['user_type'] == '2':   r = func(*args, **kwargs)   return r  else:   print("不是管理员,权限不足") return inner1@outerdef 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("没有权限修改管理员密码")@outerdef 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@outer1def 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()

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

@outer1def 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 中 list 的各项操作技巧
    下一条:
    python算法表示概念扫盲教程
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在go语言中实现字符串可逆性压缩及解压缩功能(0个评论)
    • 使用go + gin + jwt + qrcode实现网站生成登录二维码在app中扫码登录功能(0个评论)
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客