import tkinter as tk import requests FONT = ("Verdana", 12) FONT_B = ("Verdana", 12, 'bold') FONT_LARGE = ("Verdana", 20) URL = "http://localhost:8000/api/authenticate" URL_REGISTER = "http://localhost:8000/api/register" URL_PROFILE = "http://localhost:8000/api/profile" class SmartPicasso(tk.Tk): def __init__(self, *args, **kwargs): tk.Tk.__init__(self, *args, **kwargs) container = tk.Frame(self) self.title('SmartPicasso') self.geometry('610x460') container.pack(side="top", fill="both", expand=True) container.grid_rowconfigure(0, weight=1) container.grid_columnconfigure(0, weight=1) self.frames = {} for F in (LoginView, MainView, RegisterView): frame = F(container, self) self.frames[F] = frame frame.grid(row=0, column=0, sticky="nsew") self.show_frame(LoginView) def show_frame(self, view, token=None): frame = self.frames[view] frame.tkraise() if token: frame.token = token class LoginView(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent) label = tk.Label(self, text="SmartPicasso", font=FONT_LARGE) label.pack(pady=10, padx=10) label1 = tk.Label(self, text='Login:', font=FONT) label1.pack() input1 = tk.Entry(self) input1.pack() label2 = tk.Label(self, text='Password:', font=FONT) label2.pack() input2 = tk.Entry(self, show="*") input2.pack() button = tk.Button(self, text="Login", font=FONT, command=lambda: self.login(controller, input1.get(), input2.get())) button.pack() button2 = tk.Button(self, text="Register", font=FONT, command=lambda: controller.show_frame(RegisterView)) button2.pack() def login(self, controller, login, password): print(login) print(password) data = { "email": str(login), "password": str(password) } resp = requests.post(URL, json=data) print(resp) if resp.status_code == 200: response = resp.json() token = response['token'] controller.show_frame(MainView, token) else: print("bad pass") bad_pass_label = tk.Label(self, text='Wrong login/password!', font=FONT) bad_pass_label.pack() return () class MainView(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent) self.frames = {} self.token = '' for F in (ProfileView,): frame = F(parent, controller) self.frames[F] = frame frame.grid(row=0, column=0, sticky="nsew") label = tk.Label(self, text="SmartPicasso", font=FONT_LARGE) label.pack(pady=10, padx=10) label_u = tk.Label(self, text="Main menu", font=FONT) label_u.pack(pady=10, padx=10) button_profile = tk.Button(self, text="My profile", font=FONT, command=lambda: self.show_frame(ProfileView)) button_profile.pack() def show_frame(self, view): frame = self.frames[view] frame.tkraise() if self.token: print(self.token) frame.token = self.token frame.start() class RegisterView(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent) label = tk.Label(self, text="SmartPicasso", font=FONT_LARGE) label.pack(pady=10, padx=10) label_u = tk.Label(self, text="Register", font=FONT) label_u.pack(pady=10, padx=10) label0 = tk.Label(self, text='Email:', font=FONT) label0.pack() input0 = tk.Entry(self) input0.pack() label1 = tk.Label(self, text='Login:', font=FONT) label1.pack() input1 = tk.Entry(self) input1.pack() label2 = tk.Label(self, text='Password:', font=FONT) label2.pack() input2 = tk.Entry(self, show="*") input2.pack() label3 = tk.Label(self, text='First name:', font=FONT) label3.pack() input3 = tk.Entry(self) input3.pack() label4 = tk.Label(self, text='Last name:', font=FONT) label4.pack() input4 = tk.Entry(self) input4.pack() button1 = tk.Button(self, text="Register", font=FONT, command=lambda: self.register(controller, input0.get(), input1.get(), input2.get(), input3.get(), input4.get())) button1.pack() button2 = tk.Button(self, text="Cancel", font=FONT, command=lambda: controller.show_frame(LoginView)) button2.pack() def register(self, controller, email, login, passw, name, lastname): data = { "email": str(email), "password": str(passw), "profile": { "username": str(login), "first_name": str(name), "last_name": str(lastname) } } print(data) response = requests.post(URL_REGISTER, json=data) print(response) if response.status_code == 201: response = response.json() controller.show_frame(LoginView) else: print("sth wrong") bad_pass_label = tk.Label(self, text='Something went wrong!', font=FONT) bad_pass_label.pack() return () class ProfileView(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent) self.token = '' label = tk.Label(self, text="SmartPicasso", font=FONT_LARGE) label.pack(pady=10, padx=10) label_l1 = tk.Label(self, text="Login:", font=FONT_B) label_l1.pack(pady=10, padx=10) self.label_username = tk.Label(self, text='', font=FONT) self.label_username.pack(pady=10, padx=10) label_n1 = tk.Label(self, text="Name:", font=FONT_B) label_n1.pack(pady=10, padx=10) self.label_first_name = tk.Label(self, text='', font=FONT) self.label_first_name.pack(pady=10, padx=10) label_ln1 = tk.Label(self, text="Last name", font=FONT_B) label_ln1.pack(pady=10, padx=10) self.label_last_name = tk.Label(self, text='', font=FONT) self.label_last_name.pack(pady=10, padx=10) button_profile = tk.Button(self, text="Back", font=FONT, command=lambda: controller.show_frame(MainView, self.token)) button_profile.pack() def start(self): headers = {'Authorization': 'Bearer ' + self.token} resp = requests.get(URL_PROFILE, headers=headers) response = resp.json() print(response) self.label_username['text'] = response['profile']['username'] self.label_first_name['text'] = response['profile']['first_name'] self.label_last_name['text'] = response['profile']['last_name'] app = SmartPicasso() app.mainloop()