亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

簡(jiǎn)單的python后臺(tái)管理程序

 更新時(shí)間:2017年04月13日 11:49:10   作者:前程明亮  
這篇文章主要為大家詳細(xì)介紹了簡(jiǎn)單python后臺(tái)管理程序的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

一、作業(yè)需求

 

二、流程圖

三、源碼與具體思路

 import shutil
import os
import sys


USER_LOGIN = {'is_login': False}

def outer(func):     #裝飾器,若沒有登陸則輸出“請(qǐng)登陸”
 def inner(*args, **kwargs):
  if USER_LOGIN['is_login']:
   r = func(*args, **kwargs)
   return r
  else:
   print("請(qǐng)登陸")
 return inner


def outer1(func):     #裝飾器,若不是管理員則輸出“權(quán)限不足”
 def inner1(*args, **kwargs):
  if USER_LOGIN['user_type'] == '2':
   r = func(*args, **kwargs)
   return r
  else:
   print("不是管理員,權(quán)限不足")
 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文件復(fù)制到regist_bak文件中去
  os.rename('regist_new', 'regist') #再將regist_new改名為regist 妙妙妙!
 else:
  print("沒有權(quán)限修改管理員密碼")



@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']: #若用戶還沒注冊(cè)
  print("用戶不存在,請(qǐng)注冊(cè)")



def register(reg_user, reg_pwd, reg_email, reg_phone): #注冊(cè)
 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("注冊(cè)/添加信息:", 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  #標(biāo)志位原本設(shè)為False,當(dāng)找到相應(yīng)用戶刪除后,標(biāo)志位設(shè)為True
     print("普通用戶刪除成功")
     continue
    f2.write(line)
  shutil.move('regist', 'regist_bak')
  os.rename('regist_new', 'regist')

  if not exit_flag:
   print("要?jiǎng)h除普通用戶不存在")
 elif type_user == '2': #若刪除的是管理員用戶
  print("沒有權(quán)限刪除管理員帳號(hào)")



def upper_level(upper_user): #升級(jí)為管理員
 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):  #簡(jiǎn)單搜索
 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]  #返回帳號(hào)的類型 1或2



@outer1
def admin_user():   #管理員調(diào)用
 num = input("請(qǐng)選擇:1.修改密碼;2.查看本用戶信息;3.修改普通用戶密碼;"
    "4.刪除/添加普通用戶;5.權(quán)限管理;6.關(guān)鍵字搜索普通用戶信息;7.退出:")
 if num == '1':
  new_pwd = input("請(qǐng)輸入新的密碼:")
  change_pwd(new_pwd)
 elif num == '2':
  look_information()
 elif num == '3':
  user_changed = input("請(qǐng)輸入修改密碼的用戶名:")
  type_user = get_usertype(user_changed)
  new_pwd = input("請(qǐng)輸入新的密碼:")
  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("請(qǐng)輸入要?jiǎng)h除普通用戶的用戶名:")
   type_user = get_usertype(delete_username)
   delete_func(delete_username, type_user)
  elif add_or_dele == '2':
   regi_username = input("請(qǐng)輸入注冊(cè)用戶名:")
   regi_pwd = input("請(qǐng)輸入注冊(cè)密碼:")
   regi_email = input("請(qǐng)輸入郵箱:")
   regi_phone = input("請(qǐng)輸入電話:")
   register(regi_username, regi_pwd, regi_email, regi_phone)
 elif num == '5':
  upper_user = input("請(qǐng)輸入升級(jí)為管理員的普通用戶名:")
  upper_level(upper_user)

 elif num == '6':
  search_information = input("請(qǐng)輸入要查找的關(guān)鍵字:")
  search(search_information)
 elif num == '7':
  sys.exit()





def main():

 while True:
  choice = input("請(qǐng)選擇:1.登陸;2.注冊(cè);3.修改密碼;4.查看信息;5.后臺(tái)管理;6.退出:")
  if choice == '1':
   username = input("請(qǐng)輸入用名名:")
   password = input("請(qǐng)輸入密碼:")
   login(username, password)
  elif choice == '2':
   regi_username = input("請(qǐng)輸入注冊(cè)用戶名:")
   regi_pwd = input("請(qǐng)輸入注冊(cè)密碼:")
   regi_email = input("請(qǐng)輸入郵箱:")
   regi_phone = input("請(qǐng)輸入電話:")
   register(regi_username, regi_pwd,regi_email,regi_phone)
   print("注冊(cè)成功".center(50, '*'))
  elif choice == '3':
   new_pwd = input("請(qǐng)輸入新的密碼:")
   current_user = USER_LOGIN['current_user']
   change_pwd(current_user, new_pwd)
   print("修改密碼成功,請(qǐng)重新登陸".center(50, '-'))
   sys.exit()
  elif choice == '4':
   look_information()
  elif choice == '5':
   admin_user()
  elif choice == '6':
   sys.exit()


main()

為了方便,再貼下不折疊代碼

@outer1
def admin_user():   #管理員調(diào)用
 num = input("請(qǐng)選擇:1.修改密碼;2.查看本用戶信息;3.修改普通用戶密碼;"
          "4.刪除/添加普通用戶;5.權(quán)限管理;6.關(guān)鍵字搜索普通用戶信息;7.退出:")
 if num == '1':
  new_pwd = input("請(qǐng)輸入新的密碼:")
  change_pwd(new_pwd)
 elif num == '2':
  look_information()
 elif num == '3':
  user_changed = input("請(qǐng)輸入修改密碼的用戶名:")
  type_user = get_usertype(user_changed)
  new_pwd = input("請(qǐng)輸入新的密碼:")
  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("請(qǐng)輸入要?jiǎng)h除普通用戶的用戶名:")
   type_user = get_usertype(delete_username)
   delete_func(delete_username, type_user)
  elif add_or_dele == '2':
   regi_username = input("請(qǐng)輸入注冊(cè)用戶名:")
   regi_pwd = input("請(qǐng)輸入注冊(cè)密碼:")
   regi_email = input("請(qǐng)輸入郵箱:")
   regi_phone = input("請(qǐng)輸入電話:")
   register(regi_username, regi_pwd, regi_email, regi_phone)
 elif num == '5':
  upper_user = input("請(qǐng)輸入升級(jí)為管理員的普通用戶名:")
  upper_level(upper_user)

 elif num == '6':
  search_information = input("請(qǐng)輸入要查找的關(guān)鍵字:")
  search(search_information)
 elif num == '7':
  sys.exit()

 

 

def main():

 while True:
  choice = input("請(qǐng)選擇:1.登陸;2.注冊(cè);3.修改密碼;4.查看信息;5.后臺(tái)管理;6.退出:")
  if choice == '1':
   username = input("請(qǐng)輸入用名名:")
   password = input("請(qǐng)輸入密碼:")
   login(username, password)
  elif choice == '2':
   regi_username = input("請(qǐng)輸入注冊(cè)用戶名:")
   regi_pwd = input("請(qǐng)輸入注冊(cè)密碼:")
   regi_email = input("請(qǐng)輸入郵箱:")
   regi_phone = input("請(qǐng)輸入電話:")
   register(regi_username, regi_pwd,regi_email,regi_phone)
   print("注冊(cè)成功".center(50, '*'))
  elif choice == '3':
   new_pwd = input("請(qǐng)輸入新的密碼:")
   current_user = USER_LOGIN['current_user']
   change_pwd(current_user, new_pwd)
   print("修改密碼成功,請(qǐng)重新登陸".center(50, '-'))
   sys.exit()
  elif choice == '4':
   look_information()
  elif choice == '5':
   admin_user()
  elif choice == '6':
   sys.exit()

main()

四、坑總結(jié)

1.怎么修改密碼?

當(dāng)時(shí)我蒙了。因?yàn)槿绻胒.write(xx),是直接寫在文件的最后面的。這樣我想,好吧寫在最后面也行。

但將已修改密碼的記錄加在最后一行,那又怎么把原來的刪掉?又多了一個(gè)麻煩。

或者說,不加在最后一行,直接改那一行,又怎么做?

shutil.move('regist', 'regist_bak') 
#把regist文件復(fù)制到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!
比如:當(dāng)用戶名與密碼一樣是,修改密碼時(shí),把密碼也修改了。還不止,用replace()方法,在改
user_type時(shí)也出現(xiàn)把用戶名等修改的現(xiàn)象。當(dāng)時(shí)我再次蒙比。這不科學(xué)!
后來仔細(xì)看了replace()的源碼才發(fā)現(xiàn)我錯(cuò)了。
也可以看看Python replace()方法

3.當(dāng)我登入管理員后,添加普通用戶后,發(fā)現(xiàn)不能再次登入管理員了。

于是我回去看register(reg_user, reg_pwd, reg_email, reg_phone),
發(fā)現(xiàn)我濫用全局變量

USER_LOGIN['user_type'] = '1'
register_list.append(USER_LOGIN['user_type'])

原來這里我重新賦值USER_LOGIN['user_type'] = '1'

后來為了解決這類問題,寫了個(gè)get_user_type()方法

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論