日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python用户管理系统

發(fā)布時(shí)間:2024/1/8 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python用户管理系统 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

自定義函數(shù)+裝飾器,每一個(gè)模塊寫的一個(gè)函數(shù)

很多地方能用裝飾器(邏輯跟不上,有的地方?jīng)]用),包括雙層裝飾器(不會(huì)),很多地方需要優(yōu)化,重復(fù)代碼太多

我還是把我的流程圖拿出來(lái)吧,雖然看著比上次的垃圾,但是我也做了一個(gè)小時(shí),不容易!

好像是挺丑的(表示不會(huì)畫,但我下次一定努力)

用戶文件:

文件名為:user.txt

1代表管理員用戶

2代表普通用戶

smelond|admin|xx@qq.com|1?
admin|admin|qweqwe@qq.com|2?
qwe|qweasd|qwe@qq.com|2

代碼(感覺(jué)這個(gè)程序還有很多bug):

!/usr/bin/env python

*?coding:utf-8?*

File_type:用戶管理程序,裝飾器版本,多功能

Filename:user_manage_program.py

Author:smelond

import os

os.system(“cls”) # windows中的清屏

COUNT = 0 # 計(jì)數(shù)器?
WHETHER_LOGIN = {“is_login”: “error”} # 用于判斷是否有用戶登錄?
USER_LIST = [] # 當(dāng)前用戶信息存放的列表

def register_function(): # 注冊(cè)函數(shù) (所有注冊(cè)都來(lái)調(diào)用這個(gè)函數(shù))?
count = 3 # 計(jì)數(shù)器,做到了一個(gè)提示用戶的作用?
for i in range(3): # 循環(huán)3次?
print(“用戶注冊(cè)【你只有3次機(jī)會(huì)】,你還有【%s】次機(jī)會(huì)”.center(80, “=”) % count) # 輸出提示?
count -= 1 # 每次減1?
username = input(“請(qǐng)輸入用戶名:”)?
while True:?
passwd = input(“請(qǐng)輸入密碼:”)?
if len(passwd) >= 5:?
break?
else: # 如果輸入的密碼小于5,位數(shù),向下操作?
print(“請(qǐng)輸入大于5位數(shù)的密碼”)?
input_passwd = input(“【1:繼續(xù)輸入;2:返回上一步】”)?
if input_passwd == “1”:?
pass?
else:?
main()?
while True:?
email = input(“請(qǐng)輸入郵箱:”)?
email_count = email.count(“@”) # 查看輸入的郵箱是否帶@,?
# print(email_count) # 返回1代表有一個(gè)@?
if email_count == 1:?
break # 如果有一個(gè)@符號(hào),代表郵箱輸入正確,跳出當(dāng)前循環(huán)?
else:?
print(“請(qǐng)輸入正確的郵箱”)?
input_email = input(“【1:繼續(xù)輸入;2:返回上一步】”)?
if input_email == “1”:?
pass?
else:?
main()

register_user = [username, passwd, email, "2"] # 將我們輸入的用戶名密碼以及郵箱放到一個(gè)列表中,普通用戶,所以加上了一個(gè)2with open("user.txt", "r") as user:for line in user:f_user_list = line.strip("\n").split("|")if register_user[0] == f_user_list[0]:print("用戶名已被注冊(cè)")breakif register_user[2] == f_user_list[2]: # 判斷我們輸入得的郵箱和用戶名是否以及存在print("郵箱已被注冊(cè)")breakelse: # 接下來(lái)是通過(guò)了上面的篩選,開(kāi)始把我們的注冊(cè)信息寫進(jìn)數(shù)據(jù)庫(kù)(總感覺(jué)上面有bug)user_write = "|".join(register_user) # 用join方法將這個(gè)列表轉(zhuǎn)換為以|分隔# open_user = open("user.txt", "a") # a 以追加方式寫入文件# open_user.write("\n" + user_write)# open_user.close() # 記得關(guān)閉with open("user.txt", "a") as f:f.write("\n" + user_write) # 跟上面一樣的方法,這種不用關(guān)閉文件print("注冊(cè)成功")user_write = """用戶名:【%s】;密碼:【%s】;郵箱:【%s】""" \% (register_user[0], register_user[1], register_user[2]) # 注冊(cè)成功的提示信息return user_write # 返回提示信息

def outer(func): # 裝飾器,用于管理接口?
def inner(*args, **kwargs):?
if WHETHER_LOGIN[“is_login”] == “success” and USER_LIST[3] == “1”: # 為什么要加上引號(hào),因?yàn)樵诹斜碇写鎯?chǔ)的是字符串,而不是整形?
r = func() # 執(zhí)行我們傳入的函數(shù)?
return r # 返回?
elif WHETHER_LOGIN[“is_login”] == “success” and USER_LIST[3] == “2”: # 如果為普通用戶,提示沒(méi)有足夠權(quán)限并且返回到main函數(shù)?
print(“\n當(dāng)前用戶為普通用戶【%s】,沒(méi)有足夠的權(quán)限” % USER_LIST[0])?
main()?
else:?
print(“\n當(dāng)前沒(méi)有用戶登錄,請(qǐng)登錄后再試。。。”) # 否者就是沒(méi)有登錄了?
main()

return inner

def user_login(func): # 檢測(cè)用戶是否登錄的裝飾器?
def inner(*args, **kwargs):?
if WHETHER_LOGIN[“is_login”] == “success”: # 判斷是否登錄?
r = func()?
return r # 如果已經(jīng)登錄,返回到原本的函數(shù)?
else:?
user_no = input(“請(qǐng)登錄后再試【1:用戶登錄;2:返回】:”)?
if user_no == “1”:?
login()?
else:?
print(“返回成功”)?
main()

return inner # 切記,這里必須返回一個(gè)inner,不然上面的inner不會(huì)執(zhí)行,不能再后面加(),如果加上了,就相當(dāng)于調(diào)用這個(gè)函數(shù)

def exit_login(): # 6退出登錄?
global USER_LIST?
if USER_LIST:?
quit_login = input(“當(dāng)前用戶為【%s】,確定要退出【Y/N】:” % USER_LIST[0])?
# if quit_login == “Y” or quit_login == “y” or quit_login == “yes”:?
if quit_login in (“Y”, “y”, “yes”, “yES”, “yeS”, “yEs”, “YES”, “Yes”, “YEs”): # 如果quit_login滿足其中一個(gè),繼續(xù)執(zhí)行?
WHETHER_LOGIN[“is_login”] = “error”?
USER_LIST = [] # 直接將列表清除為初始狀態(tài),不知道這種方法好不好,但是好像管用?
elif quit_login in (“N”, “n”, “No”, “nO”, “NO”):?
print(“退出失敗”)?
else:?
print(“沒(méi)有用戶登錄。。。”)

def verifi_passwd():?
with open(“user.txt”, “r”) as old_user:?
lines = old_user.readlines() # 一次性讀取整個(gè)文件,感覺(jué)這方方式不好?
flag = True?
cout = 3?
while flag:?
cout -= 1?
user_info = input(“請(qǐng)輸入用戶名:”)?
if user_info == “”: # 判斷是否輸入字符串?
print(“你沒(méi)有輸入任何用戶。。。\n”)?
manage()?
for line in lines:?
user_all_info = line.strip(“\n”).split(“|”)?
if user_info == user_all_info[0]:?
current_user = user_all_info # 如果輸入的用戶和用戶文件里面的用戶相同,那就將他的所有信息寫入一個(gè)新的列表中?
flag = False?
if cout == 0:?
print(“然而,你可能不知道有哪些用戶,趕緊去查看吧。。。”)?
manage()

lines_user = [lines, current_user] return lines_user

def user_info_func(username, password_or_power, user_info, lines): # 幾個(gè)傳入的類型為:用戶名、密碼或用戶權(quán)限,需要修改的用戶列表的位置、需要循環(huán)的文件內(nèi)容?
new_user_info = username.copy() # 將username復(fù)制給new_user_info?
new_user_info[user_info] = password_or_power # 將新的用戶密碼修改為輸入的新密碼?
username = “|”.join(username) # 將列表轉(zhuǎn)換為數(shù)據(jù)庫(kù)可以識(shí)別的內(nèi)容?
new_user_info = “|”.join(new_user_info)?
# print(username, new_user_info)?
with open(“user.txt”, “w”) as new_user:?
for line in lines: # 將返回的整個(gè)文件循環(huán)打印?
if username in line: # 如果返回的用戶信息在返回的文件里面?
line = line.replace(username, new_user_info) # 那就將舊的用戶信息替換為新的用戶信息?
new_user.write(line) # 寫入文件?
print(“修改成功”) # 提示信息

@outer # 調(diào)用裝飾器?
def manage(): # 5用戶管理接口?
while True:?
print(“用戶管理接口【歡迎管理員[%s]】”.center(69, “=”) % USER_LIST[0])?
print(“1:查看所有用戶;2、添加新用戶;3:刪除用戶;4:修改用戶密碼;5:升級(jí)用戶權(quán)限;6:退出用戶管理”)?
user_input = input(“請(qǐng)輸入對(duì)象序號(hào):”)?
if user_input == “1”: # 查看用戶信息?
print(“\n” + “-” * 80) # 打印80個(gè)-?
with open(“user.txt”, “r”) as user_info:?
for line in user_info:?
user_list = line.strip(“\n”).split(“|”) # 去掉默認(rèn)的\n和|將他轉(zhuǎn)換為列表類型?
if user_list[3] == “1”:?
user_rights = “管理員用戶” # 用戶最后一個(gè)數(shù)如果等于1,代表管理員?
else:?
user_rights = “普通用戶” # 否者為普通用戶?
ordinary_user = “”“用戶名【%s】\t密碼【%s】\t郵箱【%s】\t用戶等級(jí)【%s】”“” \?
% (user_list[0], user_list[1], user_list[2], user_rights) # 中間默認(rèn)有一個(gè)換行符?
print(ordinary_user)?
print(“-” * 80 + “\n”)

elif user_input == "2":while True:ret = register_function() # 調(diào)用注冊(cè)函數(shù)print(ret) # 輸出返回值break # 跳出當(dāng)前這個(gè)while循環(huán)elif user_input == "3":flag = "error" # 默認(rèn)是沒(méi)有用戶的(做到一個(gè)提示作用)del_user = verifi_passwd()[1][0] # 得到函數(shù)返回的第二個(gè)值print("\033[1;31m刪除用戶為:\033[0m", del_user)with open("user.txt", "r") as old_user:lines = old_user.readlines() # 一次性讀取整個(gè)文件,感覺(jué)這方方式不好1with open("user.txt", "w") as new_user:for line in lines: # 將上面讀取到的文集一行一行的循環(huán)出來(lái)if line.startswith(del_user): # 檢查數(shù)據(jù)庫(kù)里面是否有我們輸入的用戶(以輸入的用戶名開(kāi)頭)flag = "success"continuenew_user.write(line)if flag == "success": # 提示成功print("刪除成功")else:print("沒(méi)有這個(gè)用戶。。。") # 如果輸入的為空格或一些沒(méi)有的用戶,提示沒(méi)有這個(gè)用戶continueelif user_input == "4":ret = verifi_passwd() # 得到函數(shù)返回值lines = ret[0] # 獲取到返回的整個(gè)文件內(nèi)容username = ret[1] # 獲取到返回的需要修改密碼的用戶new_password = input("請(qǐng)輸入用戶的新密碼:")if len(new_password) < 5: # 判斷輸入的密碼長(zhǎng)度是否大于或等于5位數(shù)error_prompt = input("你輸入的密碼長(zhǎng)度小于5位數(shù),由于你是管理員,輸入Y繼續(xù):").strip("") # 去掉輸入的空格if error_prompt not in ("y", "Y"): # 如果輸入的值不為y或Y,就直接退出print("退出。。。")continueuser_info_func(username, new_password, 1, lines) # 傳入實(shí)參到函數(shù),1在列表中的位置代表用戶的新密碼elif user_input == "5": # 下面這部分和上面的部分基本相似,其實(shí)可以寫一個(gè)函數(shù)用來(lái)調(diào)用的ret = verifi_passwd()lines = ret[0]username = ret[1] # 獲取到輸入用戶的所有信息new_power = input("輸入Y提升用戶權(quán)限:")if new_power not in ("y", "Y"):print("輸入錯(cuò)誤。。。")breakuser_info_func(username, "1", 3, lines) # 傳入實(shí)參:用戶名、權(quán)限(1代表管理員)、位置、循環(huán)的文件內(nèi)容elif user_input == "6":print("返回上一級(jí)!!!")main()else:print("輸入有誤")

@user_login # 調(diào)用裝飾器?
def see(): # 4查詢當(dāng)前用戶的基本信息?
if USER_LIST[3] == “1”: # 數(shù)據(jù)庫(kù)里面定義了1代表管理員用戶,2代表普通用戶?
user_level = “管理員用戶”?
else:?
user_level = “普通用戶”?
user_see = “””?
—————————————-?
用戶名: 【%s】?
密 碼: 【%s】?
郵 箱: 【%s】?
用戶等級(jí):【%s】?
—————————————-?
“”” % (USER_LIST[0], USER_LIST[1], USER_LIST[2], user_level) # 一個(gè)簡(jiǎn)單的格式化輸出?
print(user_see)

def error_password():?
counter = 3?
while True:?
counter -= 1?
if counter == 0:?
print(“你輸入錯(cuò)誤的次數(shù)太多,程序自動(dòng)返回。。。”)?
main()?
else:?
print(“兩次輸入的密碼不相同。。。”)?
continue

@user_login # 調(diào)用裝飾器?
def alter(): # 3修改密碼?
print(“當(dāng)前用戶為:【%s】” % USER_LIST[0])?
while True:?
old_user_password = input(“請(qǐng)輸入當(dāng)前用戶的舊密碼密碼:”)?
if old_user_password == USER_LIST[1]:?
flag = True?
count = 3?
while flag:?
count -= 1?
new_user_password = input(“請(qǐng)輸入當(dāng)前用戶的\033[1;31m新密碼\033[0m:”) # 給新密碼字體加顏色?
new_user_password1 = input(“再次輸入當(dāng)前用戶的\033[1;31m新密碼\033[0m:”)?
if len(new_user_password) >= 5:?
flag = False?
elif count == 0:?
print(“多次不合法,程序自動(dòng)返回。。。”)?
main()?
else:?
print(“輸入不合法,請(qǐng)輸入大于5位數(shù)的密碼”)?
if new_user_password == new_user_password1: # 判斷兩次輸入的密碼是否相等?
with open(“user.txt”, “r”) as user_info: # 以讀的方式打開(kāi)這個(gè)文件?
old_user_info = “|”.join(USER_LIST) # 獲取以前的舊信息?
for line in user_info: # 將獲取到的每行循環(huán)輸出?
if USER_LIST[0] in line: # 找到當(dāng)前登錄的用戶的這個(gè)用戶名?
USER_LIST[1] = new_user_password1 # 如果找到了,就把新密碼重新加入到我們?nèi)值挠脩舻男畔⒘斜碇?
new_user_info = “|”.join(USER_LIST) # 將用戶信息表中的內(nèi)容用join方法轉(zhuǎn)換為用戶數(shù)據(jù)庫(kù)里面的格式(新用戶信息)?
# print(new_user_info)?
# print(old_user_info)?
break # 跳出當(dāng)前?
with open(“user.txt”, “r”) as old_user:?
lines = old_user.readlines() # 一次性讀取整個(gè)文件,感覺(jué)這方方式不好?
with open(“user.txt”, “w”) as new_user:?
for line in lines: # 將上面讀取到的文集一行一行的循環(huán)出來(lái)?
if old_user_info in line: # 檢查文件里面是否有我們用戶的舊信息?
line = line.replace(old_user_info, new_user_info) # 如果有就用replace替換?
new_user.write(line) # 接著寫入到文件?
print(“修改成功√”)?
break # 完成后跳出

else: # 兩次不相等print("兩次輸入的密碼不相同,程序自動(dòng)返回。。。")main()else: # 當(dāng)前用戶密碼輸入錯(cuò)誤print("當(dāng)前用戶密碼輸入錯(cuò)誤,程序自動(dòng)返回。。。")main()

def register(): # 2用戶注冊(cè)?
if WHETHER_LOGIN[“is_login”] == “success”:?
quit_login = input(“無(wú)法注冊(cè)用戶,請(qǐng)退出登錄后重試【1:退出登錄;2:返回上一步】:”)?
if quit_login == “1”:?
exit_login() # 跳轉(zhuǎn)到退出用戶函數(shù)?
elif quit_login == “2”:?
print(“返回成功”)?
elif WHETHER_LOGIN[“is_login”] == “error”:?
ret = register_function() # 調(diào)用注冊(cè)函數(shù)?
print(ret) # 將返回值輸出

def login(): # 1用戶登錄?
print(“用戶登錄”.center(82, “=”))?
username = input(“請(qǐng)輸入用戶名:”)?
passwd = input(“請(qǐng)輸入密碼:”)?
with open(“user.txt”, “r”) as user:?
for line in user:?
f_user_list = line.strip(“\n”).split(“|”) # 去除每行默認(rèn)的回車,以及|,并且將它轉(zhuǎn)換為列表賦給f_admin_list?
if f_user_list[0] == username and f_user_list[1] == passwd:?
print(“登錄成功”)?
global USER_LIST?
USER_LIST = f_user_list # 將獲取到的當(dāng)前行放到用戶信息列表中?
WHETHER_LOGIN[“is_login”] = “success” # 登錄成功將is_login的值設(shè)置success?
WHETHER_LOGIN[“is_user”] = username # 將我們登錄的用戶放入字典用,方便后期查詢?
# print(USER_LIST)?
return f_user_list?
else:?
print(“登錄失敗”)

def main():?
while True:?
global COUNT?
COUNT += 1?
print(“用戶管理系統(tǒng)”.center(80, “*”) + “\n”)?
print(“1、用戶登錄;2:用戶注冊(cè);3:修改密碼;4:用戶信息;5:用戶管理;6:退出登錄;7:退出程序”)?
inp = input(“請(qǐng)輸入序號(hào):”)?
if inp == “1”:?
if USER_LIST:?
if USER_LIST[3] == “1”:?
print(“當(dāng)前為管理員用戶:【%s】,不能繼續(xù)登錄” % USER_LIST[0])?
else:?
print(“當(dāng)前用戶為【%s】,不能繼續(xù)登錄” % USER_LIST[0])?
else:?
login()?
elif inp == “2”:?
register()?
elif inp == “3”:?
alter()?
elif inp == “4”:?
see()?
elif inp == “5”:?
manage()?
elif inp == “6”:?
exit_login()?
elif inp == “7”:?
exit(“程序已退出!!!”)?
else:?
if COUNT == 3:?
exit(“輸入錯(cuò)誤次數(shù)過(guò)多,程序自動(dòng)退出。。。”)?
else:?
print(“輸入有誤,請(qǐng)重新輸入。。。\n”)?
continue

main()

總結(jié)

以上是生活随笔為你收集整理的python用户管理系统的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。