简单的python后台管理程序

作者:前程明亮 时间:2022-01-07 03:49:30 

一、作业需求

 简单的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,后台管理
0
投稿

猜你喜欢

  • 在弹出窗口用POST提交数据

    2010-02-24 09:39:00
  • SqlServer应用之sys.dm_os_waiting_tasks 引发的疑问(中)

    2024-01-16 02:25:00
  • linux下如何备份还原mysql数据库

    2010-08-08 08:59:00
  • python3新特性函数注释Function Annotations用法分析

    2023-08-09 20:15:29
  • DD_belatedPNG,解决IE6不支持PNG绝佳方案

    2009-04-27 16:30:00
  • python调用staf自动化框架的方法

    2021-11-03 17:47:43
  • python使用ctypes调用扩展模块的实例方法

    2021-11-01 22:22:58
  • python读取并绘制nc数据的保姆级教程

    2023-11-23 02:19:24
  • Pytorch统计参数网络参数数量方式

    2021-03-13 03:09:04
  • Oracle自定义脱敏函数的代码详解

    2024-01-26 17:33:46
  • 流行WEB开发语言比较之ASP篇

    2007-12-23 17:23:00
  • SQL Server中通过扩展存储过程实现数据库的远程备份与恢复

    2024-01-17 14:38:41
  • js实现的xml对象转json功能示例

    2024-04-19 10:41:59
  • 微软开源最强Python自动化神器Playwright(不用写一行代码)

    2024-01-02 00:38:00
  • python对html过滤处理的方法

    2023-04-25 15:28:57
  • 9个Web设计中常见的可用性错误[译]

    2009-03-11 20:25:00
  • 关于Python 的简单栅格图像边界提取方法

    2021-08-18 18:19:28
  • Python pyautogui模块实现鼠标键盘自动化方法详解

    2023-07-25 09:16:42
  • Python实现破解网站登录密码(带token验证)

    2021-09-29 06:22:22
  • Python兔子毒药问题实例分析

    2023-11-14 11:23:56
  • asp之家 网络编程 m.aspxhome.com