简体   繁体   中英

How to store multiple items in one pickle dictionary?

I am currently attempting to make a login/signup program on my computer that will allow for multiple sets of usernames and passwords. Right now anytime I sign up, it overwrites the previous login. I am using Python 3.4.

Is there a way I can prevent this?

My code is available below:

import os
import pickle
import sys
import time

user_name = 'default'
pass_word = '12345'

login = {'username' : user_name,
         'password' : pass_word}

def cls():
    os.system('cls')
def space():
    print(' ')

def load():
    with open('logins', 'rb') as f:
        login = pickle.load(f)
def save():
    with open('logins', 'wb') as f:
        pickle.dump(login, f)

def MainMenu():
    print('Select an Option.')
    while True:
        print('1) Login')
        print('2) Signup')
        user_input = input('Option #: ')
        if user_input == '1':
            cls()
            login_user()
        elif user_input == '2':
            cls()
            signup_user()
        else:
            cls()
            continue

def signup_user():
    user_chosen_name = input('Username: ')
    login['username'] = user_chosen_name
    user_chosen_password = input('Password: ')
    login['password'] = user_chosen_password
    space()
    cls()
    print('Setup complete. Please login.')
    os.system('pause')
    save()
    cls()
    login_user()

def login_user():
    load()
    while True:
        print('Please Login.')
        space()
        user_input_name = input('Username: ')
        user_input_password = input('Password: ')
        if user_input_name == login['username'] and user_input_password == login['password']:
            space()
            print('Login Successful.')
        else:
            space()
            print('Login Failed. Please Try Again.')
            while True:
                print('1) Try Again.')
                print('2) Main Menu.')
                user_cont = input('Continue?: ')
                if user_cont == '1':
                    cls()
                    break
                elif user_cont == '2':
                    cls()
                    MainMenu() 
                    break

if __name__ == '__main__':
    if os.path.isfile('logins') == False:
        save()
    else: 
        pass
    MainMenu()

Here are two proposals for the login/password data model.

  1. Use a dictionary, this is probably the simplest way ; I suggest using this.

     # init with default passwords = {user_name: pass_word} # password look-up if login in passwords: print passwords[login] else: print 'User', login, 'is not registered' # password set or update password[login] = new_password 
  2. List of couples or list of dictionaries. This may be closer to your current solution, but I would not recommend it. I only show what the initialization would be.

     # list of couples logins = [(user_name, pass_word)] # list of dictionaries logins = [{'username' : user_name, 'password' : pass_word}] 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM