2013-02-13 6 views
0

Mon script python, avec tkinter et sqlite3:mon script (comme indiqué) ne se connecte pas correctement?

#! /usr/bin/python 

from Tkinter import * 

import hashlib 
import sqlite3 
conn = sqlite3.connect("test.db") 
query = conn.cursor() 


root = Tk() 

root.geometry("800x800+10+10") 
root.title('test') 

user_session = "None" 

def login(): 
    username_val_ = username_.get() 
    password_val_ = password_.get() 
    password_en = hashlib.sha512(password_val_).hexdigest() 
    query.execute("SELECT `username` FROM `users` WHERE `username` = ? AND `password` = ?", (username_val_, password_en)) 
    rows = 0 
    for user in query: 
     rows = rows +1 
     final_name_ = user 
    if rows == 1: 
     final_name = final_name_[0] 
     user_session = final_name 
     print(user_session) 


if user_session == "None": 

    username_l = Label(root, text= "Username:") 
    username_l.place(x=20, y=0) 

    username = Entry(root) 
    username.place(x=20, y=20) 

    password_l = Label(root, text= "Password:") 
    password_l.place(x=20, y=50) 

    password = Entry(root, show="*") 
    password.place(x=20, y=70) 

    def clear_fields(): 
     username.delete(0, END) 
     password.delete(0, END) 
    def clear_fields_(): 
     username_.delete(0, END) 
     password_.delete(0, END)  
    def join(username, password): 
     new_pass = hashlib.sha512(password).hexdigest() 
     print(new_pass) 
     query.execute("INSERT INTO users (username, password) VALUES(?, ?)", (username, new_pass)) 
     conn.commit() 

    def run_test(): 
     username_val = username.get() 
     password_val = password.get() 
     if len(username_val)>0 and len(password_val)>0: 
      error_textv.set("") 
      join(username_val, password_val) 
      suc_textv.set("Well done!") 
     else: 
      error_textv.set("All fields are required") 

    button = Button(root, text = "Reset", command = clear_fields) 
    button.place(x=120, y=100) 

    button = Button(root, text = "Register", command = run_test) 
    button.place(x=20,y=100) 


    error_textv = StringVar() 
    error_textv.set("") 
    error_text = Label(root, textvariable= error_textv, fg = 'red') 
    error_text.place(x=40,y=140) 

    suc_textv = StringVar() 
    suc_textv.set("") 
    suc_text = Label(root, textvariable= suc_textv, fg = 'green') 
    suc_text.place(x=40,y=140) 


    suc_text = Label(root, text = 'Or') 
    suc_text.place(x=400,y=50) 


    username_l_ = Label(root, text= "Username:") 
    username_l_.place(x=600, y=0) 

    username_ = Entry(root) 
    username_.place(x=600, y=20) 

    password_l_ = Label(root, text= "Password:") 
    password_l_.place(x=600, y=50) 

    password_ = Entry(root, show="*") 
    password_.place(x=600, y=70) 


    button_ = Button(root, text = "Reset", command = clear_fields_) 
    button_.place(x=700, y=100) 


    button_ = Button(root, text = "Login", command = login) 
    button_.place(x=600,y=100) 

else: 
    print "Welocme" 

photo = PhotoImage(file="email.gif") 
w = Label(root, image=photo) 
w.photo = photo 
w.place(x=300, y = 600) 

root.mainloop() 

Comme vous le verrez, mon code est très mal écrit et en désordre. Sur la fonction de connexion, j'espérais que cela définirait "user_session" au nom d'utilisateur, ce qu'il fait, mais l'instruction if "if user_session =" None ": alors la page de connexion entière est affichée, mais quand je définis le variable au nom d'utilisateur de connexion la page de connexion reste, au lieu d'imprimer "bienvenue" ... des idées?

+1

Le mainloop n'est pas démarré jusqu'à ce que tous les autres code (l'instruction 'if', etc.) a al course prête. Python n'exécutera plus ce code, quel que soit l'interface de Tk. –

+0

ok, c'est logique. aurai-je besoin d'un peu de boucle? –

+0

Vous devez restructurer votre code, oui. –

Répondre

0

Je crois (bien que je ne suis pas certain) que votre variable user_session n'est pas changée par def login(). Au lieu de def login() crée un nouvelle variable appelée user_session et ne change pas la session d'utilisateur en cours.Vous devriez jeter un oeil aux variables globales et comment les utiliser. global variables and how to use them