import bcrypt import customtkinter import sqlite3 from tkinter import messagebox
customtkinter.set_appearance_mode('dark') customtkinter.set_default_color_theme('green')
# Функция для создания базы данных и таблицы пользователей def initialize_database(): conn = sqlite3.connect('users.db') cursor = conn.cursor() cursor.execute(''' CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY, username TEXT NOT NULL, password TEXT NOT NULL, role TEXT NOT NULL ) ''')
# Хешируем пароли admin_pass = bcrypt.hashpw('admin_pass'.encode('utf-8'), bcrypt.gensalt()).decode('utf-8') user_pass = bcrypt.hashpw('user_pass'.encode('utf-8'), bcrypt.gensalt()).decode('utf-8')
# Добавляем пользователей, если их еще нет в таблице cursor.execute( "INSERT OR IGNORE INTO users (id, username, password, role) VALUES (1, 'Admin', ?, 'admin')", (admin_pass,)) cursor.execute( "INSERT OR IGNORE INTO users (id, username, password, role) VALUES (2, 'User', ?, 'user')", (user_pass,))
conn.commit() conn.close()
# Класс приложения class App(customtkinter.CTk): def __init__(self): super().__init__()
self.geometry('460x370') self.title('Приложение')
self.login_entry = customtkinter.CTkEntry(self, placeholder_text="Введите логин") self.login_entry.pack(pady=10, padx=10) self.password_entry = customtkinter.CTkEntry(self, placeholder_text="Введите пароль", show="*") self.password_entry.pack(pady=10, padx=10) self.button = customtkinter.CTkButton(master=self, text='Войти', command=self.logging) self.button.pack(pady=10, padx=10)
def logging(self): login = self.login_entry.get() password = self.password_entry.get()
try: conn = sqlite3.connect('users.db') cursor = conn.cursor() cursor.execute("SELECT password, role FROM users WHERE username = ?", (login,)) result = cursor.fetchone() conn.close()
if result: stored_password, role = result if bcrypt.checkpw(password.encode('utf-8'), stored_password.encode('utf-8')): if role == 'admin': self.open_admin_window() elif role == 'user': self.open_user_window() else: messagebox.showerror("Ошибка", "Неправильный логин или пароль") # Используем messagebox для отображения ошибки else: messagebox.showerror("Ошибка", "Неправильный логин или пароль") # Используем messagebox для отображения ошибки except sqlite3.Error as e: messagebox.showerror("Ошибка базы данных", f"Произошла ошибка: {e}")
def open_admin_window(self): admin_window = customtkinter.CTkToplevel(self) admin_window.geometry('300x200') admin_window.title('Администратор') admin_window.focus_set()
def open_user_window(self): user_window = customtkinter.CTkToplevel(self) user_window.geometry('300x200') user_window.title('Пользователь') user_window.focus_set()
if __name__ == '__main__': initialize_database() app = App() app.mainloop()import bcrypt import customtkinter import sqlite3 from tkinter import messagebox
customtkinter.set_appearance_mode('dark') customtkinter.set_default_color_theme('green')
# Функция для создания базы данных и таблицы пользователей def initialize_database(): conn = sqlite3.connect('users.db') cursor = conn.cursor() cursor.execute(''' CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY, username TEXT NOT NULL, password TEXT NOT NULL, role TEXT NOT NULL ) ''')
# Хешируем пароли admin_pass = bcrypt.hashpw('admin_pass'.encode('utf-8'), bcrypt.gensalt()).decode('utf-8') user_pass = bcrypt.hashpw('user_pass'.encode('utf-8'), bcrypt.gensalt()).decode('utf-8')
# Добавляем пользователей, если их еще нет в таблице cursor.execute( "INSERT OR IGNORE INTO users (id, username, password, role) VALUES (1, 'Admin', ?, 'admin')", (admin_pass,)) cursor.execute( "INSERT OR IGNORE INTO users (id, username, password, role) VALUES (2, 'User', ?, 'user')", (user_pass,))
conn.commit() conn.close()
# Класс приложения class App(customtkinter.CTk): def __init__(self): super().__init__()
self.geometry('460x370') self.title('Приложение')
self.login_entry = customtkinter.CTkEntry(self, placeholder_text="Введите логин") self.login_entry.pack(pady=10, padx=10) self.password_entry = customtkinter.CTkEntry(self, placeholder_text="Введите пароль", show="*") self.password_entry.pack(pady=10, padx=10) self.button = customtkinter.CTkButton(master=self, text='Войти', command=self.logging) self.button.pack(pady=10, padx=10)
def logging(self): login = self.login_entry.get() password = self.password_entry.get()
try: conn = sqlite3.connect('users.db') cursor = conn.cursor() cursor.execute("SELECT password, role FROM users WHERE username = ?", (login,)) result = cursor.fetchone() conn.close()
if result: stored_password, role = result if bcrypt.checkpw(password.encode('utf-8'), stored_password.encode('utf-8')): if role == 'admin': self.open_admin_window() elif role == 'user': self.open_user_window() else: messagebox.showerror("Ошибка", "Неправильный логин или пароль") # Используем messagebox для отображения ошибки else: messagebox.showerror("Ошибка", "Неправильный логин или пароль") # Используем messagebox для отображения ошибки except sqlite3.Error as e: messagebox.showerror("Ошибка базы данных", f"Произошла ошибка: {e}")
def open_admin_window(self): admin_window = customtkinter.CTkToplevel(self) admin_window.geometry('300x200') admin_window.title('Администратор') admin_window.focus_set()
def open_user_window(self): user_window = customtkinter.CTkToplevel(self) user_window.geometry('300x200') user_window.title('Пользователь') user_window.focus_set()
if __name__ == '__main__': initialize_database() app = App() app.mainloop()