· 6 years ago · Apr 01, 2019, 11:30 PM
1from tkinter import messagebox
2from tkinter import *
3import sqlite3
4import os.path
5import re
6
7class LoginManagement(Tk):
8 def __init__(self):
9 Tk.__init__(self)
10 self.resizable(0,0)
11 self.title('Login')
12
13 # Checking if database exists
14 if not os.path.exists('database/db.sqlite3'):
15 self.__set_dependencies()
16
17 self.email = StringVar()
18 self.password = StringVar()
19
20 # Menu
21 main_menu = Menu(self)
22 self.config(menu = main_menu)
23
24 file = Menu(main_menu, tearoff = 0)
25 file.add_command(label = 'Register', command = self.form_register)
26 file.add_command(label = 'Quit ', command = self.quit_menu)
27 main_menu.add_cascade(label = 'File', menu = file)
28
29 # Frame
30 main_frame = LabelFrame(self, text = ' Login ', font = ('Times New Roman', 15))
31 main_frame.grid(row = 0, column = 0, pady = 5, padx = 10)
32
33 # Email Input
34 Label(main_frame, text = 'Email:').grid(row = 0, column = 0, pady = 4, padx = 5)
35 Entry(main_frame, textvariable = self.email, justify = CENTER).grid(row = 0, column = 1, pady = 4, padx = 5)
36
37 # Password Input
38 Label(main_frame, text = 'Password:').grid(row = 1, column = 0, pady = 4, padx = 5)
39 Entry(main_frame, textvariable = self.password, show = '*', justify = CENTER).grid(row = 1, column = 1, pady = 4, padx = 5)
40
41 # Button for login
42 Button(main_frame, text = 'login', command = self.login_authentication).grid(row = 2, columnspan = 2, sticky = W + E)
43
44 def run_query(self, query, parameters = ()):
45 with sqlite3.connect('database/db.sqlite3') as connection:
46 cursor = connection.cursor()
47 result = cursor.execute(query, parameters)
48 connection.commit()
49
50 return result
51
52 def __set_dependencies(self):
53 query = '''
54 CREATE TABLE registers_login (
55 ID INTEGER PRIMARY KEY AUTOINCREMENT,
56 FirstName VARCHAR(35),
57 LastName VARCHAR(35),
58 Email VARCHAR(35),
59 PhoneNumber INTEGER(13),
60 Password VARCHAR(40),
61 RegistrationDate DATE
62 )
63 '''
64
65 self.run_query(query)
66
67 def login_authentication(self):
68 if len(self.email.get()) != 0 and len(self.password.get()) != 0:
69 query = 'SELECT Email, Password FROM registers_login'
70 login_data = self.run_query(query).fetchall()
71 login_received = (self.email.get(), self.password.get())
72
73 if login_received in login_data:
74 messagebox.showinfo('Login', 'You have successfully logged in!')
75 else:
76 messagebox.showwarning('Login', 'Email or Password is incorrect, try again.')
77
78 def form_register(self):
79 window_register = Toplevel()
80 window_register.resizable(0,0)
81 window_register.title('Register')
82
83 first_name = StringVar()
84 last_name = StringVar()
85 email = StringVar()
86 phone_number = StringVar()
87 password = StringVar()
88
89 def register():
90 if len(first_name.get()) != 0 and len(last_name.get()) != 0 and len(email.get()) != 0 and len(phone_number.get()) != 0 and len(password.get()) != 0:
91 test_1 = re.search('.com$', email.get())
92 test_2 = re.search('@', email.get())
93
94 query = 'SELECT Email FROM registers_login'
95 emails = self.run_query(query).fetchall()
96 test_email = (email.get(),)
97
98 if test_1 == None or test_2 == None:
99 messagebox.showwarning('Register', 'Invalid mail, try again.')
100 elif not phone_number.get().isdigit():
101 messagebox.showwarning('Register', 'Invalid phone number, try again.')
102 elif test_email in emails:
103 messagebox.showwarning('Register', 'Mail not available')
104 else:
105 query = 'INSERT INTO registers_login VALUES(NULL, ?, ?, ?, ?, ?, DATE("NOW"))'
106 parameters = (first_name.get(), last_name.get(), email.get(), phone_number.get(), password.get())
107 self.run_query(query, parameters)
108
109 messagebox.showwarning('Register', 'has been successfully registered')
110 window_register.destroy()
111
112 # Frame
113 register_frame_1 = LabelFrame(window_register, text = ' Register ', font = ('Times New Roman', 15))
114 register_frame_1.grid(row = 0, column = 0, pady = 5, padx = 10)
115
116 register_frame_2 = LabelFrame(window_register)
117 register_frame_2.grid(row = 1, column = 0, pady = 5, padx = 10)
118
119 # First-Name Input
120 Label(register_frame_1, text = 'First-Name:').grid(row = 0, column = 0, pady = 4, padx = 5)
121 Entry(register_frame_1, textvariable = first_name, justify = CENTER).grid(row = 0, column = 1, pady = 4, padx = 5)
122
123 # Last-Name Input
124 Label(register_frame_1, text = 'Last-Name:').grid(row = 1, column = 0, pady = 4, padx = 5)
125 Entry(register_frame_1, textvariable = last_name, justify = CENTER).grid(row = 1, column = 1, pady = 4, padx = 5)
126
127 # Email Input
128 Label(register_frame_2, text = 'Email:').grid(row = 0, column = 0, pady = 4, padx = 5)
129 Entry(register_frame_2, textvariable = email, justify = CENTER, width = 21).grid(row = 0, column = 1, pady = 4, padx = 5)
130
131 # Phone-Number Input
132 Label(register_frame_2, text = 'Phone:').grid(row = 1, column = 0, pady = 4, padx = 5)
133 Entry(register_frame_2, textvariable = phone_number, justify = CENTER, width = 21).grid(row = 1, column = 1, pady = 4, padx = 5)
134
135 # Password Input
136 Label(register_frame_2, text = 'Password:').grid(row = 2, column = 0, pady = 4, padx = 5)
137 Entry(register_frame_2, textvariable = password, show = '*', justify = CENTER, width = 21).grid(row = 2, column = 1, pady = 4, padx = 5)
138
139 # Button for register
140 Button(register_frame_2, text = 'register', command = lambda:register()).grid(row = 3, columnspan = 2, sticky = W + E)
141
142 def quit_menu(self):
143 quit = messagebox.askquestion('Login', 'Leave the menu?')
144 if quit == 'yes':
145 self.destroy()
146
147if __name__ == "__main__":
148 window = LoginManagement()
149 window.mainloop()