Flask-Login login_user()在传递用户对象时抛出TypeError

时间:2016-10-27 15:54:26

标签: python flask flask-login

我尝试使用Flask-Login扩展来处理我的用户会话,但是当我调用login_user(user)方法时,它会抛出以下错误

File "app.py", line 55, in login_user
login_user(user)
TypeError: login_user() takes 0 positional arguments but 1 was given

但Flask-Login文档说它将用户对象作为参数,我在网上找到的所有实现都以这种方式使用该方法,因此我无法理解我的错误所在。

这是我的用户模型:

class Users(db.Model):
 __tablename__ = "users"
 u_id = db.Column(db.Integer, primary_key=True)
 username = db.Column(db.String(80))
 passhash = db.Column(db.String(256))
 fname = db.Column(db.String(80))
 lname = db.Column(db.String(80))

 def hash_password(self, password):
     self.passhash = pwd_context.encrypt(password)

 def verify_password(self, password):
     return pwd_context.verify(password, self.passhash)

 @property
 def is_active(self):
     return True

 @property
 def is_authenticated(self):
     return True

 @property
 def is_anonymous(self):
     return False

 def get_id(self):
     return str(self.u_id)

这是登录功能:

app = Flask(__name__)
login_manager = LoginManager()
login_manager.init_app(app)

@login_manager.user_loader
def load_user(user_id):
    return models.Users.query.filter_by(u_id =int(user_id)).first()

db = SQLAlchemy(app)

@app.route('/login', methods=['POST'])
def login_user():
    username = request.form['username']
    password = request.form['password']
    user = models.Users.query.filter_by(username = username).first()
    if not user or not user.verify_password(password):
        return jsonify({'success': False})

    login_user(user)
    return jsonify({'success': True})

任何人都可以帮助我了解我出错的地方吗? 提前谢谢!

2 个答案:

答案 0 :(得分:3)

您的错误源自名称冲突。 Flask if let description = ((jsonResult["weather"]as? NSArray)?[0]as? NSDictionary)?["main"]as? String { DispatchQueue.main.sync(execute:) { self.resultLabel.text = description 被您的视图遮蔽,它们具有相同的名称。 Python正确地假设您尝试进行递归调用,尽管签名错误。将您的视图函数<html> <head> <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> <script type="text/javascript" src="index.js"></script> <script type="text/javascript" src="//www.google.com/jsapi"></script> <script type="text/javascript" src="https://apis.google.com/js/client.js?onload=onJSClientLoad"></script> </head> </body> <div id="login-container" class="pre-auth">This application requires access to your YouTube account. Please <a href="#" id="login-link">authorize</a> to continue. </div> <div class="post-auth"> <div id="message"></div> <div id="chart"></div> <div>Choose a Video:</div> <ul id="video-list"></ul> </div> <body> 重命名为其他内容。

答案 1 :(得分:0)

你的代码中有一个拼写错误,你递归地调用login_user(),它不带任何参数。您可以打电话给load_user(user)

load_user(user)