English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Beispiel zur Erklärung der Implementierung eines Distributed Locks in Redis mit der Java-Sprache

Ich habe so lange Python gelernt und das erste Mal so viel Code geschrieben (ich gebe zu, dass ich nur3Über 00 Zeilen, es gibt viel wiederholten Code, ich gebe zu, dass ich wirklich schrottig bin), aber es war auch nicht einfach

Benutzerdefinierte Funktion+Dekoratoren, eine Funktion, die jeder Modul schreibt

An vielen Orten können Dekoratoren verwendet werden (die Logik hält nicht mit, an einigen Orten werden sie nicht verwendet), einschließlich doppelten Dekoratoren (kann nicht), an vielen Orten ist eine Optimierung erforderlich, es gibt zu viel wiederholten Code

Ich werde meine Prozessdiagramme herausnehmen, auch wenn sie schlechter aussehen als das letzte Mal Müll, aber ich habe eine Stunde gemacht, das ist nicht einfach!

Es scheint recht hässlich zu sein (zeigt an, dass ich nicht zeichnen kann, aber ich werde mir das nächste Mal sicher anstrengen)

Benutzerdatei:

Der Dateiname lautet: user.txt

1Der Vertreter des Administrators

2代表普通用户

smelond|admin|[email protected]|1
admin|admin|[email protected]|2
qwe|qweasd|[email protected]|2

代码(感觉这个程序还有很多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 # 计数器
WHETHER_LOGIN = {"is_login": "error"} # 用于判断是否有用户登录
USER_LIST = [] # 当前用户信息存放的列表
def register_function(): # 注册函数 (所有注册都来调用这个函数)
 count = 3 # 计数器,做到了一个提示用户的作用
 for i in range(3): # 循环3次
 print("用户注册【你只有3次机会】,你还有【%s】次机会".center(80, "=") % count) # 输出提示
 count -= 1 # 每次减1
 username = input("Bitte geben Sie den Benutzernamen ein:")
 while True:
  passwd = input("Bitte geben Sie das Passwort ein:")
  if len(passwd) >= 5:
  break
  else: # 如果输入的密码小于5位数,向下操作
  print("请输入大于5Passwörter mit einer bestimmten Anzahl von Zeichen)
  input_passwd = input("【1:继续输入;2:返回上一步】")
  if input_passwd == "1:
   pass
  else:
   main()
 while True:
  email = input("请输入邮箱:")
  email_count = email.count("@") # 查看输入的邮箱是否带@,
  # print(email_count) # 返回1代表有一个@
  if email_count == 1:
  break # 如果有一个@符号,代表邮箱输入正确,跳出当前循环
  else:
  print("请输入正确的邮箱")
  input_email = input("【1:继续输入;2:返回上一步】")
  if input_email == "1:
   pass
  else:
   main()
 register_user = [username, passwd, email, "2"] # Unser Benutzername, Passwort und E-Mail werden in einer Liste gespeichert, Normalbenutzer, daher wurde ein2
 with 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("Der Benutzername wurde bereits registriert")
   break
  if register_user[2] == f_user_list[2]: # Beurteilen Sie, ob die von uns eingegebenen E-Mail-Adresse und Benutzername bereits existieren
   print("Die E-Mail wurde bereits registriert")
   break
  else: # Als Nächstes beginnen wir damit, unsere Registrierungsinformationen in die Datenbank zu schreiben (es fühlt sich so an, als gäbe es oben einen Bug)
  user_write = "|".join(register_user) # Verwenden Sie die join-Methode, um diese Liste in ein durch | getrenntes Format zu konvertieren
  # open_user = open("user.txt", "a") # a schreibt in die Datei als Anhänge
  # open_user.write("\n" + user_write)
  # open_user.close() # Denken Sie daran, zu schließen
  with open("user.txt", "a") as f:
   f.write("\n" + user_write) # Auf die gleiche Weise wie oben, dies erfordert keine Schließung der Datei
  print("Registrierung erfolgreich")
  user_write = """Benutzername:【%s】; Passwort:【%s】; E-Mail:【%s】""" \
    % (register_user[0], register_user[1], register_user[2]) # Hinweis auf erfolgreiche Registrierung
  return user_write # Rückgabe der Hinweismeldung
def outer(func): # Dekoration, um die Schnittstelle zu verwalten
 def inner(*args, **kwargs):
 if WHETHER_LOGIN["is_login"] == "success" and USER_LIST[3] == "1: # Warum werden Anführungszeichen verwendet? Weil in der Liste Strings gespeichert sind, nicht Ganzzahlen
  r = func() # Ausführung der übergebenen Funktion
  return r # Rückgabe
 elif WHETHER_LOGIN["is_login"] == "success" and USER_LIST[3] == "2: # Wenn der Benutzer ein normaler Benutzer ist, wird darauf hingewiesen, dass keine ausreichenden Berechtigungen vorhanden sind, und die Funktion main wird zurückgegeben
  print("\nDer aktuelle Benutzer ist ein normaler Benutzer 【%s】,hat nicht genügend Berechtigungen" % USER_LIST[0])
  main()
 else:
  print("\nDerzeit ist kein Benutzer angemeldet, bitte melden Sie sich an und versuchen Sie es erneut...") # Andernfalls ist der Benutzer nicht angemeldet
  main()
 return inner
def user_login(func): # Überprüfungsdekoration, ob der Benutzer angemeldet ist
 def inner(*args, **kwargs):
 if WHETHER_LOGIN["is_login"] == "success": # Überprüfen Sie, ob angemeldet
  r = func()
  return r # Wenn bereits angemeldet, zurück zum ursprünglichen Funktion
 else:
  user_no = input("Bitte melden Sie sich an, um erneut zu versuchen【1: Benutzeranmeldung;2: zurückschicken】:")
  if user_no == "1:
  login()
  else:
  print("Rückgabe erfolgreich")
  main()
 return inner # Bitte beachten Sie, dass hier inner zurückgegeben werden muss, sonst wird upper inner nicht ausgeführt. Es sollte keine () am Ende hinzugefügt werden, da dies sonst die Funktion aufruft
def exit_login(): # 6Abmeldung
 global USER_LIST
 if USER_LIST:
 quit_login = input("Der aktuelle Benutzer ist【%s】,sind Sie sicher, dass Sie abmelden möchten【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"): # Wenn quit_login einem der folgenden Werte entspricht, wird fortgesetzt
  WHETHER_LOGIN["is_login"] = "error"
  USER_LIST = [] # Die Liste wird direkt auf den初始状态清除,weiß nicht, ob diese Methode gut ist, aber es scheint zu funktionieren
 elif quit_login in ("N", "n", "No", "nO", "NO"):
  print("Abmeldung fehlgeschlagen")
 else:
 print("Kein Benutzer hat sich angemeldet。。。")
def verifi_passwd():
 with open("user.txt", "r") as old_user: # Öffnen Sie die Datei "user.txt" im Lesemodus
 lines = old_user.readlines() # Lesen Sie den gesamten Inhalt der Datei auf einmal, was nicht gut ist
 flag = True
 cout = 3
 while flag:
 cout -= 1
 user_info = input("Bitte geben Sie den Benutzernamen ein:")
 if user_info == "": # Überprüfen Sie, ob ein String eingegeben wurde
  print("Du hast keinen Benutzer eingegeben。。。\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 # Wenn der eingegebene Benutzer mit dem Benutzer im Dateiinhalt übereinstimmt, wird seine gesamte Information in eine neue Liste geschrieben
  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): # 几个传入的类型为:用户名、密码或用户权限,需要修改的用户列表的位置、需要循环的文件内容
 new_user_info = username.copy() # 将username复制给new_user_info
 new_user_info[user_info] = password_or_power # 将新的用户密码修改为输入的新密码
 username = "|".join(username) # 将列表转换为数据库可以识别的内容
 new_user_info = "|".join(new_user_info)
 # print(username, new_user_info)
 with open("user.txt", "w") as new_user: # Öffnen Sie die Datei "user.txt" im Schreibmodus
 for line in lines: # 将返回的整个文件循环打印
  if username in line: # 如果返回的用户信息在返回的文件里面
  line = line.replace(username, new_user_info) # 那就将旧的用户信息替换为新的用户信息
  new_user.write(line) # 写入文件
 print("修改成功") # 提示信息
@outer # 调用装饰器
def manage(): # 5用户管理接口
 while True:
 print("用户管理接口【欢迎管理员[%s]】".center(69, "=") % USER_LIST[0])
 print("1:查看所有用户;2、添加新用户;3:删除用户;4:修改用户密码;5:升级用户权限;6:退出用户管理
 user_input = input("请输入对象序号:")
 if user_input == "1: # Benutzerinformationen anzeigen
  print("\n" + "-" * 80) # Druck80个-
  with open("user.txt", "r") as user_info:
  for line in user_info:
   user_list = line.strip("\n").split("|") # Entferne den Standard \n und | und wandele ihn in eine Liste um
   if user_list[3] == "1:
   user_rights = "Adminbenutzer" # Wenn die letzte Zahl des Benutzers gleich ist1,was einen Administrator bedeutet
   else:
   user_rights = "Normalbenutzer" # Andernfalls ist es ein Normalbenutzer
   ordinary_user = """Benutzername【%s】\tPasswort【%s】\tE-Mail【%s】\tBenutzerstufe【%s】""" \
     %% (user_list[0], user_list[1], user_list[2], user_rights) # Zwischen ihnen ist ein Zeilenumbruch
   print(ordinary_user)
  print("-" * 80 + \n")
 elif user_input == "2:
  while True:
  ret = register_function() # Register-Funktion aufrufen
  print(ret) # Zeige den Rückgabewert an
  break # Verlasse den aktuellen While-Zyklus
 elif user_input == "3:
  flag = "error" # Standard ist, dass es keinen Benutzer gibt (zur Anzeige einer Meldung)
  del_user = verifi_passwd()[1][0] # Hole den zweiten Wert der Rückgabe der Funktion
  print("\033[1;31mDer zu löschende Benutzer ist:\033[0m", del_user)
  with open("user.txt", "r") as old_user: # Öffnen Sie die Datei "user.txt" im Lesemodus
  lines = old_user.readlines() # Lesen Sie den gesamten Inhalt der Datei auf einmal, was nicht gut ist1
  with open("user.txt", "w") as new_user: # Öffnen Sie die Datei "user.txt" im Schreibmodus
  for line in lines: # Iterieren Sie jede Zeile der gelesenen Sammlung
   if line.startswith(del_user): # Überprüfe, ob der Benutzer im Datenbank-System existiert (mit dem Namen des eingegebenen Benutzers beginnend)
   flag = "success"
   continue
   new_user.write(line)
  if flag == "success": # Zeige Erfolg an
   print("Löschen erfolgreich")
  else:
   print("Dieser Benutzer existiert nicht...") # Wenn der Eingabe leer ist oder einige Benutzer ohne Benutzername, wird "Dieser Benutzer existiert nicht..." angezeigt
   continue
 elif user_input == "4:
  ret = verifi_passwd() # Hole den Rückgabewert der Funktion
  lines = ret[0] # Hole den gesamten Inhalt der zurückgegebenen Datei
  username = ret[1] # Hole den zurückgegebenen Benutzer, der das Passwort ändern muss
  new_password = input("Gib das neue Passwort des Benutzers ein:")
  if len(new_password) < 5: # Überprüfe, ob die Länge des Passworts größer oder gleich ist5Ziffern
  error_prompt = input("Die Länge deines Passworts ist kleiner als ")5Ziffern, da du ein Administrator bist, gib Y ein, um fortzufahren: ").strip("") # Entferne die Leerzeichen
  Wenn error_prompt nicht in ("y", "Y") enthalten ist: # Wenn der eingegebene Wert nicht "y" oder "Y" ist, wird direkt beendet
   print("退出。。。")
   continue
  user_info_func(username, new_password, 1, lines) # 传入实参到函数,1在列表中的位置代表用户的新密码
 elif user_input == "5]: # 下面这部分和上面的部分基本相似,其实可以写一个函数来调用
  ret = verifi_passwd()
  lines = ret[0]
  username = ret[1] # 获取到输入用户的所有信息
  new_power = input("输入Y提升用户权限:")
  if new_power not in ("y", "Y"):
  print("输入错误。。。")
  break
  user_info_func(username, "1, 3, lines) # 传入实参:用户名、权限(1代表管理员)、位置、循环的文件内容
 elif user_input == "6:
  print("返回上一级!!!")
  main()
 else:
  print("输入有误")
@user_login # 调用装饰器
def see(): # 4查询当前用户的基本信息
 if USER_LIST[3] == "1]: # 数据库中定义了1代表管理员用户,2代表普通用户
 user_level = "管理员用户"
 else:
 user_level = "普通用户"
 user_see = """
 ----------------------------------------
 用户名:【%s】
 密码:【%s】
 邮箱:【%s】
 用户等级:【%s】
 ----------------------------------------
 """ % (USER_LIST[0], USER_LIST[1], USER_LIST[2], user_level) # 一个简单的格式化输出
 print(user_see)
def error_password():
 counter = 3
 while True:
 counter -= 1
 if counter == 0:
  print("你输入错误的次数太多,程序自动返回。")
  main()
 else:
  print("两次输入的密码不相同。")
  continue
@user_login # 调用装饰器
def alter(): # 3修改密码
 print("当前用户为:【%s】" % USER_LIST[0])
 while True:
 old_user_password = input("请输入当前用户的旧密码:")
 if old_user_password == USER_LIST[1]:
  flag = True
  count = 3
  while flag:
  count -= 1
  new_user_password = input("Bitte geben Sie das aktuelle Benutzerpasswort ein\033[1;31mNeues Passwort\033[0m:") # Fügen Sie dem neuen Passwort eine Farbe hinzu
  new_user_password1 = input("Wiederholung der Eingabe des aktuellen Benutzers\033[1;31mNeues Passwort\033[0m:")
  if len(new_user_password) >= 5:
   flag = False
  elif count == 0:
   print("Mehrfach ungültige Eingabe, das Programm kehrt automatisch zurück...
   main()
  else:
   print("Ungültige Eingabe, geben Sie bitte ein Passwort mit mehr als5Passwörter mit einer bestimmten Anzahl von Zeichen)
  if new_user_password == new_user_password1: # Vergleichen Sie die Passwörter, die zweimal eingegeben wurden
  with open("user.txt", "r") as user_info: # Öffnen Sie diese Datei im Lesemodus
   old_user_info = "|".join(USER_LIST) # Erhalten Sie alte Informationen
   for line in user_info: # Schreiben Sie jede Zeile der erhaltenen Informationen aus
   if USER_LIST[0] in line: # Finden Sie den aktuellen angemeldeten Benutzernamen
    USER_LIST[1] = new_user_password1 # Wenn gefunden, fügen Sie das neue Passwort erneut in unsere globale Benutzerinformationenliste hinzu
    new_user_info = "|".join(USER_LIST) # Konvertieren Sie den Inhalt der Benutzerinformationsliste in das Format der Benutzerdatenbank (neue Benutzerinformationen)
    # print(new_user_info)
    # print(old_user_info)
    break # Verlassen Sie den aktuellen Durchlauf
  with open("user.txt", "r") as old_user: # Öffnen Sie die Datei "user.txt" im Lesemodus
   lines = old_user.readlines() # Lesen Sie den gesamten Inhalt der Datei auf einmal, was nicht gut ist
  with open("user.txt", "w") as new_user: # Öffnen Sie die Datei "user.txt" im Schreibmodus
   for line in lines: # Iterieren Sie jede Zeile der gelesenen Sammlung
   if old_user_info in line: # Überprüfen Sie, ob alte Benutzerinformationen im Datei enthalten sind
    line = line.replace(old_user_info, new_user_info) # Wenn vorhanden, verwenden Sie replace zum Ersetzen
   new_user.write(line) # Schreiben Sie dann in die Datei
  print("Änderung erfolgreich√")
  break # Nach Abschluss des Abbruchs
  else: # Die beiden sind unterschiedlich
  print("Die beiden Passwörter sind unterschiedlich, das Programm kehrt automatisch zurück...")
  main()
 else: # Das Passwort des aktuellen Benutzers wurde falsch eingegeben
  print("Das Passwort des aktuellen Benutzers wurde falsch eingegeben, das Programm kehrt automatisch zurück...")
  main()
def register(): # 2Benutzerregistrierung
 if WHETHER_LOGIN["is_login"] == "success":
 quit_login = input("Kann Benutzer nicht registrieren, bitte melden Sie sich ab und versuchen Sie es erneut【1: Exit login;2:Zurück zum vorherigen Schritt】:")
 if quit_login == "1:
  exit_login() # Zum Ausloggen der Benutzerfunktion springen
 elif quit_login == "2:
  print("Rückgabe erfolgreich")
 elif WHETHER_LOGIN["is_login"] == "error":
 ret = register_function() # Register-Funktion aufrufen
 print(ret) # Die Rückgabewerte ausgeben
def login(): # 1Benutzerlogin
 print("Benutzerlogin".center(82, "="))
 username = input("Bitte geben Sie den Benutzernamen ein:")
 passwd = input("Bitte geben Sie das Passwort ein:")
 with open("user.txt", "r") as user:
 for line in user:
  f_user_list = line.strip("\n").split("|") # Entfernen Sie die Standard-Zeilenenden und "|", und fügen Sie es als Liste zu f_admin_list hinzu
  if f_user_list[0] == username and f_user_list[1] == passwd:
  print("Login erfolgreich")
  global USER_LIST
  USER_LIST = f_user_list # Die aktuelle Zeile in die Benutzerinformationsliste einfügen
  WHETHER_LOGIN["is_login"] = "success" # Wenn der Login erfolgreich ist, wird der Wert von is_login auf "success" gesetzt
  WHETHER_LOGIN["is_user"] = username # Unser angemeldeter Benutzer in den Dictionary einfügen, um spätere Abfragen zu erleichtern
  # print(USER_LIST)
  return f_user_list
 else:
  print("Login failed")
def main():
 while True:
 global COUNT
 COUNT += 1
 print("User Management System".center(80, "*) + \n")
 print("1, User login;2: User registration;3: Change password;4: User information;5: User management;6: Exit login;7: Exit program)
 inp = input("Please enter the number: ")
 if inp == "1:
  if USER_LIST:
  if USER_LIST[3] == "1:
   print("The current user is the administrator: [%s], cannot continue to log in" % USER_LIST[0])
  else:
   print("The current user is [%s], cannot continue to log in" % 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("Program has exited!!!")
 else:
  if COUNT == 3:
  exit("Input errors too many times, program automatically exits...")
  else:
  print("Input error, please re-enter...\n")
  continue
main()

This is the full content of the example explanation of the Python user management system shared by the editor. I hope it can provide a reference for everyone and also hope everyone will support and cheer for the tutorial.

Statement: The content of this article is from the Internet, the copyright belongs to the original author. The content is contributed and uploaded by Internet users spontaneously. This website does not own the copyright, has not been manually edited, and does not assume any relevant legal liability. If you find any content suspected of copyright infringement, please send an email to: notice#oldtoolbag.com (Please replace # with @ when sending an email to report abuse, and provide relevant evidence. Once verified, this site will immediately delete the infringing content.)

Empfohlene Artikel