Как правильно добавить информацию о пользователе в файл json и выполнить поиск? - PullRequest
0 голосов
/ 27 сентября 2018

Программа, над которой я работаю, будет действовать как экран входа для более крупной программы.Прямо сейчас программа запрашивает имя пользователя и пароль.Если имя пользователя и пароль совпадают с теми, которые указаны в файле, он регистрирует пользователя. Если пароль неправильный, он предлагает пользователю повторить попытку.И, если имя пользователя новое, то оно добавляет имя пользователя в список.

Проблема: Когда программа добавляет новое имя пользователя / пароль, она делает это таким образом, что программа не может выполнять поискдля возможных совпадений имени пользователя и пароля.

Мой код: из tkinter import * import json import time class LoginFrame (Frame): def init (self, master): super (). init (master) master.title ("Login")

        self.label_username = Label(self, text="Username ", font=("Helvetica", 25))
        self.label_password = Label(self, text="Password ", font=("Helvetica", 25))

        self.entry_username = Entry(self, font=("Helvetica", 25))
        self.entry_username.focus()     #This sets the focus to the username entry box
        self.entry_password = Entry(self, font=("Helvetica", 25), show="*")

        self.label_username.grid(row=0, column=0)
        self.label_password.grid(row=1, column=0)
        self.entry_username.grid(row=0, column=1)
        self.entry_password.grid(row=1, column=1)

        self.login_button = Button(self, text="Login", font=("Helvetica", 25), command=self.Login)
        self.login_button.grid(row=2, columnspan=2)

        self.grid()

    def Login(self):
        account_file_path = "C:\\LearningArabic\\LiblibArriby\\Usernames\\accounts.json"
        with open (account_file_path, "r") as f:
            current_info = json.load(f)

        username = self.entry_username.get()
        password = self.entry_password.get()

        saved_password = current_info.get("password")
        saved_username = current_info.get("username")

        if username in current_info["username"]:
            print(saved_username, saved_password)
            if password in current_info["password"]:
                L1 = Label(self, text=" You have successfully  \n logged in.", font=("Helvetica", 25))
                L1.grid(row=3, column=0, columnspan=2)

            else:
                L2 = Label(self, text="You have entered either your username \n or password incorrectly. \n Please try again.", font=("Helvetica", 15))
                L2.grid(row=3, column=0, columnspan=2)
        else:       #This section appends the new username and password combo to the json file
            L1 = Label(self, text=" You have successfully  \n added a new user.", font=("Helvetica", 25))
            L1.grid(row=3, column=0, columnspan=2)            
            usr = {"username": username,
                   "password": password,
                   "accessable modules": {
                       "lesson 1": [
                           "part 1"
                            ]
                           }}

            with open(account_file_path, "a") as test:
                current_info.update(usr)
                json.dump(current_info, test)

root = Tk()
lf = LoginFrame(root)
root.mainloop()

Исходный файл JSON:

{"username": "username", "password": "a", "accessable modules": {"lesson 1": ["part 1", "part 2", "part 3", "part 4"]}}

Файл JSON после добавления нового пользователя:

{"username": "username", "password": "a", "accessable modules": {"lesson 1" "part 1", "part 2", "part 3", "part 4"]}}{"username": "usernamed", "password": "a", "accessable modules": {"lesson 1": ["part 1"]}}

Я бы хотел найти способ правильно добавить нового пользователя, который не заменит старого пользователя.Позже я планирую использовать раздел «доступные модули», чтобы определить, какие пункты меню доступны пользователю.Следует также отметить, что эта программа предназначена только для запуска на локальном компьютере, поэтому меня не очень беспокоит безопасность пароля.На самом деле, я даже почти не добавил их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...