我尝试使用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})
任何人都可以帮助我了解我出错的地方吗? 提前谢谢!
答案 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)