kra*_*r65 5 python attributes attributeerror flask peewee
使用Flask Mega 教程我正在尝试学习 Flask。在本教程的第 5 部分中,我现在正在构建一个需要用户登录的个人资料页面。
由于我使用 peewee ORM 而不是 SQLAlchemy,因此我确实在这里或那里调整了代码,但对于这种情况,我认为这并不重要。我现在使用我的 Google (openID) 帐户登录并遇到错误,提示AttributeError: 'NoneType' object has no attribute 'is_active'。该错误发生在该函数末尾的行中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'))
Run Code Online (Sandbox Code Playgroud)
由于这段代码之前有效,我不知道为什么现在会出现错误。该is_active方法(不是属性)出现在 User 类中,如下所示:
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)
Run Code Online (Sandbox Code Playgroud)
但我有点不明白为什么这会给我带来错误。所以我的问题是:有人知道我在这里做错了什么吗?
欢迎任何提示,因为我完全迷路了..
块中无处开始
if user is None:
Run Code Online (Sandbox Code Playgroud)
您实际上是否将任何内容分配给user,所以它仍然是None并且您收到错误。尝试更改为:
user = User(nickname = nickname, ...)
Run Code Online (Sandbox Code Playgroud)
或致电
user = User.select().where(User.email == resp.email).first()
Run Code Online (Sandbox Code Playgroud)
if再次在块的末尾