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

Esempio di sistema di gestione degli utenti Python

Ho studiato Python da tanto tempo, è la prima volta che scrivo così tanto codice (ammetto che sono solo 300+ righe, ci sono molti codici ripetuti, ammetto di essere veramente mediocre), ma è stato anche difficile

Funzione personalizzata + decoratore, ogni modulo scrive una funzione

In molti luoghi si possono utilizzare decoratori (la logica non è a passo con, alcuni luoghi non li ho utilizzati), inclusi decoratori a due livelli (non so), molti luoghi necessitano di ottimizzazione, ci sono molti codici ripetuti

Ecco la mia flowchart, anche se sembra più brutta della scorsa, ci ho passato un'ora, non è stato facile!

Sembra piuttosto brutto (non sono bravo a disegnare, ma farò di meglio la prossima volta!)

File degli utenti:

Il nome del file è: user.txt

1 rappresenta l'utente amministratore

2 rappresenta l'utente normale

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

Codice(sentito che questo programma ha molti bug):

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
# File_type:programma di gestione degli utenti, versione con decoratori, multifunzionale
# Filename:user_manage_program.py
# Author:smelond
import os
os.system("cls") # Pulizia dello schermo in Windows
COUNT = 0 # Contatore
WHETHER_LOGIN = {"is_login": "error"} # Utilizzato per determinare se c'è un utente connesso
USER_LIST = [] # Elenco delle informazioni degli utenti attuali
def register_function(): # Funzione di registrazione (tutte le registrazioni chiamano questa funzione)
 count = 3 # Contatore, ha un ruolo di avviso all'utente
 for i in range(3): # Ripeti 3 volte
 print("Registrazione utente【ti rimangono solo 3 tentativi】,ti rimangono【%s】tentativi".center(80, "=") % count) # Mostra l'avviso
 count -= 1 # Diminuisci di 1 ogni volta
 username = input(\"Inserisci il nome utente: \")
 while True:
  passwd = input(\"Inserisci la password: \")
  if len(passwd) >= 5:
  break
  else: # Se la lunghezza della password è inferiore a 5 cifre, procedi di conseguenza
  print("Inserisci una password con più di 5 cifre")
  input_passwd = input("【1:continua inserendo;2:torna alla schermata precedente】")
  if input_passwd == "1":
   pass
  else:
   main()
 while True:
  email = input("Inserisci l'email:")
  email_count = email.count("@") # Controlla se l'email inserita contiene @
  # print(email_count) # Restituisce 1 se c'è un "@"
  if email_count == 1:
  break # Se c'è un simbolo @, significa che l'email è stata inserita correttamente, esci dal ciclo corrente
  else:
  print("Inserisci un'email corretta")
  input_email = input("【1:Continua l'inserimento;2:Torna al passo precedente】")
  if input_email == "1":
   pass
  else:
   main()
 register_user = [username, passwd, email, "2"] # Metti il nome utente, la password e l'email che hai inserito in una lista, utente normale, quindi aggiungi un 2
 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("Il nome utente è stato registrato")
   break
  if register_user[2] == f_user_list[2]: # Verifica se l'email e il nome utente inseriti esistono già
   print("L'email è stata registrata")
   break
  else: # Ora abbiamo superato il filtro sopra, inizia a scrivere le nostre informazioni di registrazione nel database (sembrava ci fosse un bug lì)
  user_write = "|".join(register_user) # Usa il metodo join per convertire questa lista in una separata da |
  # open_user = open("user.txt", "a") # Scrivi in appendimento nel file
  # open_user.write("\n" + user_write)
  # open_user.close() # Ricorda di chiudere
  with open("user.txt", "a") as f:
   f.write("\n" + user_write) # Come sopra, questo metodo non richiede di chiudere il file
  print("Registrazione riuscita")
  user_write = """Nome utente:【%s】;Password:【%s】;Email:【%s】"""
    (register_user[0], register_user[1], register_user[2]) # Messaggio di conferma del registro di successo
  return user_write # Restituzione messaggio di avviso
def outer(func): # Decoratore per gestire l'interfaccia
 def inner(*args, **kwargs):
 if WHETHER_LOGIN["is_login"] == "success" e USER_LIST[3] == "1": # Perché aggiungere virgolette, perché negli elenchi sono memorizzati come stringhe, non come interi
  r = func() # Esegui la funzione passata
  return r # Restituzione
 elif WHETHER_LOGIN["is_login"] == "success" e USER_LIST[3] == "2": # Se è un utente normale, avvisa che non ha i permessi sufficienti e torna alla funzione main
  print("
L'utente corrente è un utente normale [%s],non ha i permessi sufficienti" % USER_LIST[0])
  main()
 else:
  print("
Non ci sono utenti loggati, prova di nuovo dopo il login...") # Altrimenti non è loggato
  main()
 return inner
def user_login(func): # Decoratore per verificare se l'utente è loggato
 def inner(*args, **kwargs):
 if WHETHER_LOGIN["is_login"] == "success": # Giudica se è loggato
  r = func()
  return r # Se è già loggato, torna alla funzione originale
 else:
  user_no = input("Prova di nuovo dopo il login [1: login utente; 2: tornare]:")
  if user_no == "1":
  login()
  else:
  print(\"Ritorno di successo\")
  main()
 return inner # Presta attenzione, qui deve essere restituito un inner, altrimenti l'inner sopra non verrà eseguito, non puoi aggiungere (), se lo fai, significa chiamare questa funzione
def exit_login(): # 6 Esci dalla login
 global USER_LIST
 if USER_LIST:
 quit_login = input("L'utente corrente è [%s],sei sicuro di voler uscire [Y/N]:" % USER_LIST[0])
 # Se quit_login == "Y" o quit_login == "y" o quit_login == "yes":
 Se quit_login è uno dei seguenti: ("Y", "y", "yes", "yES", "yeS", "yEs", "YES", "Yes", "YEs"), continua l'esecuzione
  WHETHER_LOGIN["is_login"] = "error"
  USER_LIST = [] # Svuota direttamente la lista per ripristinarla allo stato iniziale, non so se questo metodo è buono, ma sembra funzionare
 elif quit_login in ("N", "n", "No", "nO", "NO"):
  print("Fallimento dell'uscita")
 else:
 print("Nessun utente ha effettuato il login...")
def verifi_passwd():
 with open("user.txt", "r") as old_user: # Apri il file user.txt in lettura
 lines = old_user.readlines() # Leggi tutto il file in una volta, sembra che questo metodo non sia buono
 flag = True
 cout = 3
 while flag:
 cout -= 1
 
 if user_info == \
  print("Non hai inserito alcun utente...")
  manage()
 for line in lines:
  user_all_info = line.strip("\n").split("|")
  if user_info == user_all_info[0]:
  current_user = user_all_info # Se l'utente inserito è lo stesso dell'utente nel file degli utenti, scrivi tutte le sue informazioni in una nuova lista
  flag = False
 if cout == 0:
  print("Ma forse non sai quali utenti ci sono, corri a controllare ora...")
  manage()
 lines_user = [lines, current_user]
 return lines_user
def user_info_func(username, password_or_power, user_info, lines): # Alcuni tipi di input: nome utente, password o permessi, posizione della lista dell'utente da modificare, contenuto del file da iterare
 new_user_info = username.copy() # Copia username in new_user_info
 new_user_info[user_info] = password_or_power # Modifica la nuova password dell'utente o i permessi
 username = \
 new_user_info = \
 # stampa il nome utente e le nuove informazioni dell'utente
 with open("user.txt", "w") as new_user: # Apri il file user.txt in scrittura
 for line in lines: # Stampa l'intero file restituito in un ciclo
  if username in line: # Se le informazioni utente restituite sono nel file restituito
  line = line.replace(username, new_user_info) # Sostituire le informazioni utente esistenti con le nuove informazioni utente
  new_user.write(line) # Scrivere nel file
 print("Modificato con successo") # Messaggio di avviso
@outer # Chiamare il decoratore
def manage(): # Interfaccia di gestione utenti
 while True:
 print("Interfaccia di gestione utenti【Benvenuto amministratore[%s]】".center(69, "=") % USER_LIST[0])
 print("1: Visualizza tutti gli utenti; 2: Aggiungi nuovo utente; 3: Elimina utente; 4: Modifica la password utente; 5: Aggiorna i permessi utente; 6: Esci dalla gestione utenti")
 user_input = input("Inserisci il numero dell'oggetto: ")
 if user_input == "1": # Visualizzare le informazioni utente
  print("\n" + "-" * 80) # Stampare 80 di "-"
  with open("user.txt", "r") as user_info:
  for line in user_info:
   user_list = line.strip("\n").split("|") # Rimuovere il newline predefinito e il "|", convertirli in un tipo elenco
   if user_list[3] == "1":
   user_rights = "Utente amministratore" # Se l'ultimo numero dell'utente è uguale a 1, rappresenta l'amministratore
   else:
   user_rights = "Utente normale" # Altrimenti utente normale
   ordinary_user = """Nome utente【%s】\tPassword【%s】\tEmail【%s】\tLivello utente【%s】""" \
     %% (user_list[0], user_list[1], user_list[2], user_rights) # C'è un newline predefinito in mezzo
   print(ordinary_user)
  print("-" * 80 + "\n")
 elif user_input == "2":
  while True:
  ret = register_function() # Chiamata alla funzione di registrazione
  print(ret) # Output del valore di ritorno
  break # Saltare il ciclo while corrente
 elif user_input == "3":
  flag = "error" # Predefinito senza utente (funzione di avviso)
  del_user = verifi_passwd()[1][0] # Ottieni il secondo valore del valore di ritorno della funzione
  print("\033[1;31mEliminazione utente: \033[0m", del_user)
  with open("user.txt", "r") as old_user: # Apri il file user.txt in lettura
  lines = old_user.readlines() # Leggi tutto il file in una volta, sembra che questo metodo non sia il migliore
  with open("user.txt", "w") as new_user: # Apri il file user.txt in scrittura
  for line in lines: # Itera riga per riga il testo letto sopra
   if line.startswith(del_user): # Controlla se l'utente inserito è presente nel database (inizia con il nome dell'utente)
   flag = "success"
   continue
   new_user.write(line)
  if flag == "success": # Mostra il messaggio di successo
   print("Eliminazione riuscita")
  else:
   print("Questo utente non esiste...") # Se l'input è vuoto o un utente non esistente, viene visualizzato un messaggio di errore
   continue
 elif user_input == "4":
  ret = verifi_passwd() # Ottieni il valore di ritorno della funzione
  lines = ret[0] # Ottieni il contenuto completo del file
  username = ret[1] # Ottieni l'utente che deve modificare la password
  new_password = input("Inserisci la nuova password dell'utente:")
  if len(new_password) < 5: # Verifica se la lunghezza della password è maggiore o uguale a 5 cifre
  error_prompt = input("La lunghezza della tua password è inferiore a 5 cifre, poiché sei l'amministratore, inserisci Y per continuare:").strip(" ") # Rimuovi gli spazi
  if error_prompt not in ("y", "Y"): # Se il valore inserito non è y o Y, esce direttamente
   print("Uscita...")
   continue
  user_info_func(username, new_password, 1, lines) # Passa i parametri alla funzione, 1 rappresenta la posizione nella lista del nuovo password dell'utente
 elif user_input == "5": # Questa parte è simile alla parte sopra, potrebbe essere scritta come una funzione da chiamare
  ret = verifi_passwd()
  lines = ret[0]
  username = ret[1] # Ottieni tutte le informazioni dell'utente inserito
  new_power = input("Inserisci Y per aumentare i permessi dell'utente:")
  if new_power not in ("y", "Y"):
  print("Errore di input...")
  break
  user_info_func(username, "1", 3, lines) # Passare argomenti: nome utente, permessi (1 per amministratore), posizione, contenuto del file di ciclo
 elif user_input == "6":
  print("Torna al livello superiore!!!")
  main()
 else:
  print("Inserimento errato")
@user_login # Chiamare decoratore
def see(): # 4 Cerca informazioni di base dell'utente corrente
 if USER_LIST[3] == "1": # Definito nel database 1 come utente amministratore, 2 come utente normale
 user_level = "Utente amministratore"
 else:
 user_level = "Utente normale"
 user_see = """
 ----------------------------------------
 Nome utente: 【%s】
 Password: 【%s】
 Email: 【%s】
 Livello utente: 【%s】
 ----------------------------------------
 """ % (USER_LIST[0], USER_LIST[1], USER_LIST[2], user_level) # Output formattato semplice
 print(user_see)
def error_password():
 counter = 3
 while True:
 counter -= 1
 if counter == 0:
  print("Hai inserito troppi password errate, il programma si chiude automaticamente...")
  main()
 else:
  print("Le password inserite non corrispondono...")
  continue
@user_login # Chiamare decoratore
def alter(): # 3 Modifica password
 print("Utente corrente: 【%s】" % USER_LIST[0])
 while True:
 old_user_password = input("Inserisci la vecchia password dell'utente corrente: ")
 if old_user_password == USER_LIST[1]:
  flag = True
  count = 3
  while flag:
  count -= 1
  new_user_password = input("Inserisci la nuova password dell'utente corrente: ") # Aggiungere colore al testo della nuova password
  new_user_password1 = input("Riinserisci la nuova password dell'utente corrente: ")
  segnalare lunghezza(new_user_password) >= 5:
   flag = False
  elif count == 0:
   print(" troppe volte non legali, il programma si ripete automaticamente...")
   main()
  else:
   print("L'input non è legittimo, inserisci una password con più di 5 cifre")
  if new_user_password == new_user_password1: # Verifica se le password inserite due volte sono le stesse
  with open("user.txt", "r") as user_info: # Apri questo file in modalità lettura
   old_user_info = "|".join(USER_LIST) # Ottieni le vecchie informazioni
   for line in user_info: # Itera ogni riga ricevuta
   if USER_LIST[0] in line: # Trova il nome utente corrente del login
    USER_LIST[1] = new_user_password1 # Se è stato trovato, aggiungi nuovamente la nuova password alla nostra lista globale delle informazioni degli utenti
    new_user_info = "|".join(USER_LIST) # Converti il contenuto della tabella delle informazioni degli utenti con il metodo join nel formato del database degli utenti (nuova informazione dell'utente)
    # print(new_user_info)
    # print(old_user_info)
    break # Uscire dal momento corrente
  with open("user.txt", "r") as old_user: # Apri il file user.txt in lettura
   lines = old_user.readlines() # Leggi tutto il file in una volta, sembra che questo metodo non sia buono
  with open("user.txt", "w") as new_user: # Apri il file user.txt in scrittura
   for line in lines: # Itera riga per riga il testo letto sopra
   if old_user_info in line: # Controlla se l'antica informazione dell'utente è nel file
    line = line.replace(old_user_info, new_user_info) # Se esiste, usa replace per sostituire
   new_user.write(line) # Continua a scrivere nel file
  print("Modifica riuscita √")
  break # Dopo aver completato, uscire
  else: # Due volte non uguali
  print("Le password inserite due volte non sono le stesse, il programma si ripete automaticamente...")
  main()
 else: # L'utente attuale ha inserito una password errata
  print("L'utente attuale ha inserito una password errata, il programma si ripete automaticamente...")
  main()
def register(): # 2 Registrazione utente
 if WHETHER_LOGIN[\"is_login\"] == \"success\":
 quit_login = input(\"Impossibile registrare l'utente, esce dal login e riprova [1: esce dal login; 2: torna indietro]: \")
 if quit_login == \"1\":
  exit_login() # Saltiamo alla funzione di uscita utente
 elif quit_login == \"2\":
  print(\"Ritorno di successo\")
 elif WHETHER_LOGIN[\"is_login\"] == \"error\":
 ret = register_function() # Chiamata alla funzione di registrazione
 print(ret) # Stampa il valore di ritorno
def login(): # 1 Login utente
 print(\"Login utente\".center(82, \"=\"))
 username = input(\"Inserisci il nome utente: \")
 passwd = input(\"Inserisci la password: \")
 with open(\"user.txt\", \"r\") as user:
 for line in user:
  f_user_list = line.strip(\"\n\").split(\"|\") # Rimuoviamo il ritorno a capo predefinito e |, e lo convertiamo in una lista assegnata a f_admin_list
  if f_user_list[0] == username and f_user_list[1] == passwd:
  print(\"Login successo\")
  global USER_LIST
  USER_LIST = f_user_list # Mettiamo la riga attuale in lista informazioni utenti
  WHETHER_LOGIN[\"is_login\"] = \"success\" # Se il login è successo, impostiamo il valore di is_login a success
  WHETHER_LOGIN[\"is_user\"] = username # Inseriamo l'utente che ci è loggato nel dizionario per facilitare le ricerche future
  # print(USER_LIST)
  return f_user_list
 else:
  print(\"Login fallito\")
def main():
 while True:
 global COUNT
 COUNT += 1
 print(\"Gestione degli utenti\".center(80, \"*\") + \"\n\")
 print("1, accesso utente; 2: registrazione utente; 3, modifica password; 4, informazioni utente; 5, gestione utente; 6, uscita login; 7, uscita programma")
 inp = input("Inserisci il numero di sequenza: ")
 if inp == "1":
  if USER_LIST:
  if USER_LIST[3] == "1":
   print("L'utente corrente è l'amministratore [%s], non puoi continuare a effettuare l'accesso" % USER_LIST[0])
  else:
   print("L'utente corrente è [%s], non puoi continuare a effettuare l'accesso" % 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("Il programma è stato chiuso!!!")
 else:
  if COUNT == 3:
  exit("Il numero di tentativi di input è troppo alto, il programma si è automaticamente chiuso...")
  else:
  print("L'input è errato, inserisci nuovamente...")
  continue
main()

Questa è l'intera spiegazione dell'esempio di sistema di gestione degli utenti Python che l'editor ha condiviso con tutti voi, speriamo che possa essere di riferimento per voi e che speriamo che tutti possiate sostenere l'insegnamento di urla.

Dichiarazione: il contenuto di questo articolo è stato tratto da Internet, il diritto d'autore è della proprietà del rispettivo autore, il contenuto è stato contribuito e caricato volontariamente dagli utenti di Internet, il sito web non possiede il diritto di proprietà, non è stato elaborato manualmente e non assume alcuna responsabilità legale. Se trovi contenuti sospetti di violazione del diritto d'autore, è possibile inviare una e-mail a notice#oldtoolbag.com (sostituisci # con @ quando invii l'e-mail) per segnalare il problema e fornire prove pertinenti. Una volta verificata, il sito eliminerà immediatamente i contenuti sospetti di violazione del diritto d'autore.

Ti potrebbe interessare