Python 什么';“这是问题的症结所在。”;是否经过“U认证”;登录时使用的方法?

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

我现在正在学习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, 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