欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

簡(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):     #裝飾器,若沒(méi)有登陸則輸出“請(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("沒(méi)有權(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']: #若用戶還沒(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è)為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("沒(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



@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),是直接寫(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í)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 在Django下測(cè)試與調(diào)試REST API的方法詳解

    在Django下測(cè)試與調(diào)試REST API的方法詳解

    今天小編就為大家分享一篇在Django下測(cè)試與調(diào)試REST API的方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • Python語(yǔ)言實(shí)現(xiàn)獲取主機(jī)名根據(jù)端口殺死進(jìn)程

    Python語(yǔ)言實(shí)現(xiàn)獲取主機(jī)名根據(jù)端口殺死進(jìn)程

    這篇文章主要介紹了Python語(yǔ)言實(shí)現(xiàn)獲取主機(jī)名根據(jù)端口殺死進(jìn)程的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • Python列表對(duì)象實(shí)現(xiàn)原理詳解

    Python列表對(duì)象實(shí)現(xiàn)原理詳解

    這篇文章主要介紹了Python列表對(duì)象實(shí)現(xiàn)原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Python打包為exe詳細(xì)教程

    Python打包為exe詳細(xì)教程

    今天給大家介紹如何用Python打包exe,文中有非常詳細(xì)的教程,對(duì)正在學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • Python數(shù)據(jù)分析模塊pandas用法詳解

    Python數(shù)據(jù)分析模塊pandas用法詳解

    這篇文章主要介紹了Python數(shù)據(jù)分析模塊pandas用法,結(jié)合實(shí)例形式詳細(xì)分析了Python數(shù)據(jù)分析模塊pandas的功能、常見(jiàn)用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-09-09
  • Python安裝教程全過(guò)程(2022最新)

    Python安裝教程全過(guò)程(2022最新)

    這篇文章主要介紹了Python安裝教程全過(guò)程(2022最新版本),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • python如何標(biāo)準(zhǔn)化日期時(shí)間格式轉(zhuǎn)化成非標(biāo)準(zhǔn)化格式

    python如何標(biāo)準(zhǔn)化日期時(shí)間格式轉(zhuǎn)化成非標(biāo)準(zhǔn)化格式

    這篇文章主要介紹了python如何標(biāo)準(zhǔn)化日期時(shí)間格式轉(zhuǎn)化成非標(biāo)準(zhǔn)化格式問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Python中使用pypdf2合并、分割、加密pdf文件的代碼詳解

    Python中使用pypdf2合并、分割、加密pdf文件的代碼詳解

    這篇文章主要介紹了Python中使用pypdf2合并、分割、加密pdf文件的代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • python實(shí)現(xiàn)自動(dòng)發(fā)送郵件

    python實(shí)現(xiàn)自動(dòng)發(fā)送郵件

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)自動(dòng)發(fā)送郵件功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • pytorch hook 鉤子函數(shù)的用法

    pytorch hook 鉤子函數(shù)的用法

    這篇文章主要介紹了pytorch hook 鉤子函數(shù)的用法,Hook 是 PyTorch 中一個(gè)十分有用的特性,使用后可以不必改變網(wǎng)絡(luò)輸入輸出的結(jié)構(gòu),方便地獲取、改變網(wǎng)絡(luò)中間層變量的值和梯度,下文詳細(xì)介紹需要的小伙伴可以參考一下
    2022-03-03

最新評(píng)論