热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

简单制作一个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后台管理程序的详细内容,更多请关注 第一PHP社区 其它相关文章!


推荐阅读
  • 本文介绍了如何通过安装 sqlacodegen 和 pymysql 来根据现有的 MySQL 数据库自动生成 ORM 的模型文件(model.py)。此方法适用于需要快速搭建项目模型层的情况。 ... [详细]
  • 对于编程爱好者而言,理解PHP的强大功能及其在Web开发中的应用至关重要。本文旨在分享作者在学习PHP过程中的实际经验和技巧,帮助初学者找到学习编程的有效途径。 ... [详细]
  • After Effects 十大实用可复制表达式
    本文介绍了After Effects中十个最常用的可复制表达式,这些表达式能够帮助用户快速实现各种动态效果,提升工作效率。 ... [详细]
  • 生活中的每个人都有可能陷入停滞不前的困境,适时地改变生活方式,如通过骑行等运动,不仅能够改善身体健康,还能在心理上带来新的启示与成长。 ... [详细]
  • 精选煲机软件推荐:提升耳机音质的秘密武器
    本文介绍了几款市面上流行的煲机软件,包括它们的特点、使用方法以及如何通过这些工具有效提升耳机和音箱的音质。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 本课程将于3月26日至3月29日通过在线直播形式进行,涵盖有限元法的基本概念及其在生物力学中的应用,包括使用Mimics和ANSYS软件进行建模和分析的具体操作。 ... [详细]
  • 本文介绍了如何利用jQuery实现对网页上多个div元素的显示与隐藏控制,包括基本的toggle方法及更复杂的显示隐藏逻辑。 ... [详细]
  • 本文探讨了Windows 10 64位系统的实际使用体验,并与Windows 7进行了详细对比,旨在帮助用户了解两者之间的主要差异及选择合适的操作系统。 ... [详细]
  • HBase 数据复制与灾备同步策略
    本文探讨了HBase在企业级应用中的数据复制与灾备同步解决方案,包括存量数据迁移及增量数据实时同步的方法。 ... [详细]
  • 如何更改Win10本地管理员账户名称
    本文详细介绍了更改Windows 10操作系统中本地管理员账户名称的方法,包括通过计算机管理界面进行操作的具体步骤。 ... [详细]
  • 本文探讨了程序员这一职业的本质,认为他们是专注于问题解决的专业人士。文章深入分析了他们的日常工作状态、个人品质以及面对挑战时的态度,强调了编程不仅是一项技术活动,更是个人成长和精神修炼的过程。 ... [详细]
  • TCP协议中的可靠传输机制分析
    本文深入探讨了TCP协议如何通过滑动窗口和超时重传来确保数据传输的可靠性,同时介绍了流量控制和拥塞控制的基本原理及其在实际网络通信中的应用。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 对于初学者而言,搭建一个高效稳定的 Python 开发环境是入门的关键一步。本文将详细介绍如何利用 Anaconda 和 Jupyter Notebook 来构建一个既易于管理又功能强大的开发环境。 ... [详细]
author-avatar
手机用户2502932605
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有