【问题标题】:AttributeError: 'User' object has no attribute 'is_active'AttributeError:“用户”对象没有属性“is_active”
【发布时间】:2014-12-29 21:03:28
【问题描述】:

我尝试运行我的应用程序进行登录但是当我提交表单以检查用户 ID 和电子邮件时,我收到了这个错误。AttributeError: 'User' object has no attribute 'is_active' 所以谢谢你的帮助

   rv = self.dispatch_request()

    File "/home/peg/flask/venv/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request

    return self.view_functions[rule.endpoint](**req.view_args)

    File "/home/peg/flask/app/view.py", line 45, in login

    login_user(user_in_db, remember = form.remember_me.data)

    File "/home/peg/flask/venv/lib/python2.7/site-packages/flask_login.py", line 675, in login_user

    if not force and not user.is_active():

view.py

@app.route('/login', methods = ['GET', 'POST'])
def login():
    form = LoginForm()
    #checks if the user is authernticated
    #or not, if yes it skips authentfic.
    if current_user is not None and current_user.is_authenticated():
            return redirect(request.args.get('next') or url_for('index'))
    #does not allow user to use get method
    if request.method == 'GET':
            return render_template('login.html',
                    form = form,
                    title = 'Login')

    #taking the user submitted data and checking if it exists in the database
    user_in_db = User.query.filter_by(name=form.name.data.lower()).first()

    #if the username is not wrong
    if user_in_db is not None and user_in_db != False:
            if form.email.data !=  user_in_db.email:
                    flash('email is incorrect')
                    return redirect(url_for('login'))
            #here I got error
            login_user(user_in_db, remember = form.remember_me.data)
            return redirect(request.args.get('next') or url_for('index'))
    else:
       flash('Username does not exists')
       return render_template('login.html',
            form = form,
            title = 'Login')

模型.py

class User(db.Model):
   __tablename__ = "Contacts"
   id = db.Column(db.Integer, primary_key = True)
   name = db.Column(db.String(50))
   email = db.Column(db.String(50))
   age = db.Column(db.Integer)

def __init__(self, name, email, age ):
    self.name = name
    self.email = email
    self.age = age

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.name)

【问题讨论】:

  • def 中的 model.py 缩进是否正确?它们应该在用户类中(在每个 def 之前添加一个选项卡)。
  • 是的,他们是@Doobeh

标签: flask flask-sqlalchemy flask-login


【解决方案1】:

你的缩进是错误的。您已经定义了模块级函数,而不是在 User 上定义方法。

class User(db.Model):
    __tablename__ = "Contacts"
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(50))
    email = db.Column(db.String(50))
    age = db.Column(db.Integer)

    def __init__(self, name, email, age ):
        self.name = name
        self.email = email
        self.age = age

    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.name)

【讨论】:

  • 现在我收到错误 raise ValueError('View function did not return a response') 你能帮我解决这个问题吗? @dirn
  • 这是一个完全不同的问题,应该作为一个单独的问题提出,但这意味着您访问的任何端点都有一个不以 @ 结尾的路径987654323@.
【解决方案2】:

你需要让你的模型类继承自UserMixin

from flask_login import UserMixin

class User(db.Model, UserMixin):
   __tablename__ = "Contacts"
   id = db.Column(db.Integer, primary_key = True)
   name = db.Column(db.String(50))
   email = db.Column(db.String(50))
   age = db.Column(db.Integer)

【讨论】:

    猜你喜欢
    • 2014-12-23
    • 2016-07-22
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    相关资源
    最近更新 更多