简单的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函数的笔记整理
Apr 07 Python
Python开发的实用计算器完整实例
May 10 Python
利用python打印出菱形、三角形以及矩形的方法实例
Aug 08 Python
Python输出各行命令详解
Feb 01 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
May 25 Python
Python中is和==的区别详解
Nov 15 Python
对Python3+gdal 读取tiff格式数据的实例讲解
Dec 04 Python
python爬虫库scrapy简单使用实例详解
Feb 10 Python
完美解决jupyter由于无法import新包的问题
May 26 Python
Python轻量级web框架bottle使用方法解析
Jun 13 Python
5款实用的python 工具推荐
Oct 13 Python
Django后端按照日期查询的方法教程
Feb 28 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和ACCESS写聊天室(一)
2006/10/09 PHP
php ci框架中加载css和js文件失败的解决方法
2014/03/03 PHP
javascript页面渲染速度测试脚本分享
2014/04/15 Javascript
JavaScript charCodeAt方法入门实例(用于取得指定位置字符的Unicode编码)
2014/10/17 Javascript
jquery判断复选框选中状态以及区分attr和prop
2015/12/18 Javascript
老生常谈Javascript中的原型和this指针
2016/10/09 Javascript
浅谈Nodejs中的作用域问题
2016/12/26 NodeJs
jQuery实用密码强度检测
2017/03/02 Javascript
详解webpack异步加载业务模块
2017/06/23 Javascript
在vue项目中引入高德地图及其UI组件的方法
2018/09/04 Javascript
详解使用angular框架离线你的应用(pwa指南)
2019/01/31 Javascript
vue中封装axios并实现api接口的统一管理
2020/12/25 Vue.js
[01:32]DOTA2上海特锦赛现场采访:最想COS的英雄
2016/03/25 DOTA
python实现的二叉树定义与遍历算法实例
2017/06/30 Python
python 获取指定文件夹下所有文件名称并写入列表的实例
2018/04/23 Python
python os.listdir按文件存取时间顺序列出目录的实例
2018/10/21 Python
Python3安装Pillow与PIL的方法
2019/04/03 Python
详解Python字符串切片
2019/05/20 Python
Python3 获取文件属性的方式(时间、大小等)
2020/03/12 Python
python中matplotlib实现随鼠标滑动自动标注代码
2020/04/23 Python
Python几种常见算法汇总
2020/06/02 Python
css3实现文字扫光渐变动画效果的示例
2017/11/07 HTML / CSS
详解canvas drawImage()方法绘制图片不显示的问题
2018/10/08 HTML / CSS
NBA欧洲商店(英国):NBA Europe Store UK
2018/07/27 全球购物
狗狗玩具、零食和咀嚼物的月度送货服务:Super Chewer
2018/08/22 全球购物
法国房车租赁网站:Yescapa
2019/08/26 全球购物
新闻专业大学生找工作的自我评价
2013/10/30 职场文书
省优秀教师事迹材料
2014/01/30 职场文书
取保候审保证书
2014/04/30 职场文书
员工试用期自我鉴定范文
2014/09/15 职场文书
2015年高二班主任工作总结
2015/05/25 职场文书
秋季运动会加油词
2015/07/18 职场文书
假期读书倡议书3篇
2019/08/19 职场文书
Python自动化之批量处理工作簿和工作表
2021/06/03 Python
ObjectMapper 如何忽略字段大小写
2021/06/29 Java/Android
springboot用户数据修改的详细实现
2022/04/06 Java/Android