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

簡單的python后臺管理程序

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

一、作業(yè)需求

 

二、流程圖

三、源碼與具體思路

 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時也出現(xiàn)把用戶名等修改的現(xiàn)象。當時我再次蒙比。這不科學!
后來仔細看了replace()的源碼才發(fā)現(xiàn)我錯了。
也可以看看Python replace()方法

3.當我登入管理員后,添加普通用戶后,發(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'

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 在Django下測試與調試REST API的方法詳解

    在Django下測試與調試REST API的方法詳解

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

    Python語言實現(xiàn)獲取主機名根據端口殺死進程

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

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

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

    Python打包為exe詳細教程

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

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

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

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

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

    python如何標準化日期時間格式轉化成非標準化格式

    這篇文章主要介紹了python如何標準化日期時間格式轉化成非標準化格式問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Python中使用pypdf2合并、分割、加密pdf文件的代碼詳解

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

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

    python實現(xiàn)自動發(fā)送郵件

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

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

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

最新評論