国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

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

2019-11-25 16:15:04
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

一、作業(yè)需求

 

二、流程圖

三、源碼與具體思路

 import shutilimport osimport sysUSER_LOGIN = {'is_login': False}def outer(func):     #裝飾器,若沒(méi)有登陸則輸出“請(qǐng)登陸” def inner(*args, **kwargs):  if USER_LOGIN['is_login']:   r = func(*args, **kwargs)   return r  else:   print("請(qǐng)登陸") return innerdef 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@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文件復(fù)制到regist_bak文件中去  os.rename('regist_new', 'regist') #再將regist_new改名為regist 妙妙妙! else:  print("沒(méi)有權(quán)限修改管理員密碼")@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']: #若用戶還沒(méi)注冊(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: #將用戶信息寫(xiě)入文件  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è)為T(mén)rue     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("沒(méi)有權(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@outer1def 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()

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

@outer1def 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),是直接寫(xiě)在文件的最后面的。這樣我想,好吧寫(xiě)在最后面也行。

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

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

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) 剛開(kāi)始我也用了,但是,后來(lái)有BUG!
比如:當(dāng)用戶名與密碼一樣是,修改密碼時(shí),把密碼也修改了。還不止,用replace()方法,在改
user_type時(shí)也出現(xiàn)把用戶名等修改的現(xiàn)象。當(dāng)時(shí)我再次蒙比。這不科學(xué)!
后來(lái)仔細(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'])

原來(lái)這里我重新賦值USER_LOGIN['user_type'] = '1'

后來(lái)為了解決這類問(wèn)題,寫(xiě)了個(gè)get_user_type()方法

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

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 特克斯县| 钟祥市| 思茅市| 马山县| 昭觉县| 临洮县| 祥云县| 全椒县| 司法| 元谋县| 酒泉市| 汤阴县| 太原市| 英德市| 滨海县| 天柱县| 岳普湖县| 灌南县| 光泽县| 永城市| 柞水县| 合肥市| 象州县| 民乐县| 青铜峡市| 河东区| 山东| 基隆市| 海阳市| 呼伦贝尔市| 油尖旺区| 轮台县| 垦利县| 隆安县| 垣曲县| 焦作市| 仙游县| 上虞市| 阿拉善右旗| 昆山市| 克山县|