2010-12-03 18 views
0

Ich versuche, ein Benutzerverifikationsskript zu erstellen, das den Benutzer umleitet, wenn das Kennwort und die Benutzernamen-Cookies leer oder falsch sind. Aber egal was ich mache, es schickt den Benutzer immer zu "/ false2". Es überprüft nicht einmal das if. Dies ist, was der Code wie im Moment aussieht:Google App Engine-Umleitungsproblem

 dictionary = self.request.str_cookies 
    if hasattr(dictionary, 'password') and hasattr(dictionary, 'username'): 
     checkq = db.GqlQuery("SELECT * FROM Users WHERE username = :1 AND password = :2", dictionary['username'], dictionary['password']) 
     checkresult = checkq.get() 
     if checkresult.username and checkresult.password is None: 
      self.redirect("/wrong") 
    else: 
     self.redirect("/wrong2") 

Ich bin sehr neu in Python und versuchen, es zu lernen, und ich kann nicht nur feststellen, wo der Fehler liegt. Kann jemand sehen, wo es ist?

+0

Natürlich stört es das Überprüfen des 'if'. Ihr Zustand wird immer nur mit "Falsch" bewertet. – geoffspear

Antwort

2

Sie verwenden hasattr, um zu überprüfen, ob ein dict einen bestimmten Schlüssel enthält, aber Sie sollten stattdessen den Operator in verwenden. Die hasattr Funktion überprüft nur, ob ein Objekt ein bestimmtes Attribut hat.

So könnte man stattdessen schreiben:

if 'username' in self.request.cookies and 'password' in self.request.cookies: 
    # check against the datastore 

Aber ich denke, ein etwas besserer Ansatz sein würde, die dafür sorgt, dass leere Benutzernamen oder Passwörter (man denke username = '') bekomme nicht einlassen:

# will be None if the cookie is missing 
username = self.request.cookies.get('username') 
password = self.request.cookies.get('password') 

# This makes sure that a username and password were both retrieved 
# from the cookies, and that they're both NOT the empty string (because 
# the empty string evaluates to False in this context) 
if username and password: 
    # check against the datastore 
else: 
    self.redirect("/wrong2")