Python-Flask: AttributeError: 'NoneType' - Objekt hat kein Attribut 'is_active'

Mithilfe der Kolben Mega-Tutorial ich versuche zu lernen Kolben. In Teil 5 des Tutorials ich bin jetzt den Aufbau einer Profil-Seite, die Bedürfnisse der Benutzer angemeldet sein.

Da bin ich mit der peewee ORM anstelle von SQLAlchemy, ich passe den code hier und da, aber für diesen Fall habe ich nicht glaube, dass zählt. Ich jetzt anmelden mit meinem Google (openID) Konto und auf einen Fehler sagen AttributeError: 'NoneType' object has no attribute 'is_active'. Der Fehler tritt am Ende dieser Funktion in der Zeile, die sagt login_user(user, remember = remember_me).

@oid.after_login
def after_login(resp):
    if resp.email is None or resp.email == "":
        flash('Invalid login. Please try again.')
        return redirect(url_for('login'))

    user = User.select().where(User.email == resp.email).first()

    if user is None:
        nickname = resp.nickname
        if nickname is None or nickname == "":
            nickname = resp.email.split('@')[0]
        User(nickname = nickname, email = resp.email, role = models.ROLE_USER, last_seen = datetime.utcnow()).save()

    remember_me = False
    if 'remember_me' in session:
        remember_me = session['remember_me']
        session.pop('remember_me', None)
    login_user(user, remember = remember_me)
    return redirect(request.args.get('next') or url_for('index'))

Da dieses Stück code vorher funktioniert, ich wüsste nicht, warum das jetzt gibt eine Fehlermeldung. Die is_active Methode (nicht Attribut) tritt in der User-Klasse, die wie folgt aussieht:

class User(db.Model):
    nickname = CharField()
    email = CharField(max_length=150)
    role = IntegerField(default = ROLE_USER)
    about_me = TextField(null = True, max_length=140)
    last_seen = DateTimeField()

    def is_authenticated(self):
        return True

    def is_active(self):
        return True

    def is_anonymous(self):
        return False

    def get_id(self):
        return self.id

    def avatar(self, size):
        return 'http://www.gravatar.com/avatar/' + md5(self.email).hexdigest() + '?d=mm&s=' + str(size)

    def __repr__(self):
        return '<User %r>' % (self.nickname)

Aber ich bin irgendwie verloren, warum dies wirft mir einen Fehler. Also meine Frage: weiß jemand, was ich' falsch hier?

Irgendwelche Tipps sind willkommen, da bin ich Total verloren..

  • Sie sollten nicht login_user, wenn der Benutzer Keine. Und wenn Sie einen Benutzer anlegen, diese neu erstellte Benutzer wird nie dem Benutzer zugewiesene variable
  • Dumm mich. Danke! Ich Lerne von Tag zu Tag.. 🙂
InformationsquelleAutor kramer65 | 2014-01-23
Schreibe einen Kommentar