Python 什么';“这是问题的症结所在。”;是否经过“U认证”;登录时使用的方法?
我现在正在学习Flask Mega教程,我遇到了以下代码:Python 什么';“这是问题的症结所在。”;是否经过“U认证”;登录时使用的方法?,python,web,flask,flask-login,flask-extensions,Python,Web,Flask,Flask Login,Flask Extensions,我现在正在学习Flask Mega教程,我遇到了以下代码: class User(db.Model): id = db.Column(db.Integer, primary_key = True) nickname = db.Column(db.String(64), unique = True) email = db.Column(db.String(120), unique = True) role = db.Column(db.SmallInteger, d
class User(db.Model):
id = db.Column(db.Integer, primary_key = True)
nickname = db.Column(db.String(64), unique = True)
email = db.Column(db.String(120), unique = True)
role = db.Column(db.SmallInteger, default = ROLE_USER)
posts = db.relationship('Post', backref = 'author', lazy = 'dynamic')
def is_authenticated(self):
return True
def is_active(self):
return True
def is_anonymous(self):
return False
def get_id(self):
return unicode(self.id)
def __repr__(self):
return '<User %r>' % (self.nickname)
类用户(db.Model):
id=db.Column(db.Integer,主键=True)
昵称=db.Column(db.String(64),unique=True)
email=db.Column(db.String(120),unique=True)
role=db.Column(db.SmallInteger,默认值=role\u USER)
posts=db.relationship('Post',backref='author',lazy='dynamic')
def已通过身份验证(自身):
返回真值
def处于活动状态(自):
返回真值
def是匿名的(自我):
返回错误
def get_id(自身):
返回unicode(self.id)
定义报告(自我):
返回“”%(自我昵称)
_是否经过身份验证、是否处于活动状态以及是否匿名对我来说很奇怪-他们什么时候会返回预定义值以外的内容
有人能给我解释一下为什么Flask登录让我使用这些看似无用的方法吗 首先,
是匿名的()
和是经过身份验证的()
是彼此相反的。如果你愿意,你可以把一个定义为另一个的否定
您可以使用这两种方法来确定用户是否已登录
当无人登录时,Flask登录的当前用户
被设置为匿名用户
对象。此对象对进行身份验证()
和进行活动()
时使用False
和进行匿名()
时使用True
进行响应
is\u active()
方法还有另一个重要用途。不要像我在教程中建议的那样总是返回True
,你可以让被禁止或停用的用户返回False
,这些用户将不被允许登录。我被这个是否经过身份验证
与是否匿名
困扰了好几个小时。我不敢相信他们正好相反。最后我偶然发现了。这是关于Django模板系统中的一个问题,其中不存在的变量的计算结果为False
。当测试模板代码中的是匿名的时,这可能会导致错误行为。同样,这是旧的,所以我不知道它是否成立。他们解决问题的方法是创建经过身份验证的
我想我只是毫无疑问地从Django那里复制了模型。现在我可以安心睡觉了。谢谢米格尔,这很有道理。我没有意识到当前用户可以返回一个匿名用户或用户对象。期待着这本书面世。所以正确使用User.is_authenticated的方法就是返回True?@对于普通用户,您应该返回True
。这不太需要,但对于表示未经身份验证的用户的用户对象,应该返回False
。