首页 > 解决方案 > flask_login.login_user 在将用户对象传递给它时给出错误

问题描述

我的代码不断显示:

TypeError: login_user() takes 0 positional arguments but 1 was given

但在烧瓶文档中,它清楚地接受一个对象作为其参数。

我的登录代码:

@app.route('/login',methods=['GET','POST'])
def login_user():
    form = LoginForm()
    if request.method=='POST':
        attemptedUser=User.query.filter_by(uusername=form.username.data).first()
        attemptedPassword=form.password.data
        if attemptedUser and attemptedUser.comparePassword(attemptedPassword=form.password.data):
            login_user(attemptedUser)
            return redirect(url_for("index"))
        else:
            return "password not correct"
    if request.method=='GET':
        return render_template("login.html",form=form)

而且我也怀疑给它尝试用户 obj与该尝试用户关联 的用户名是否会有所作为,或者它是否会起作用?

我的 Models.py 文件:

from market import db ,login_manager
from flask_login import UserMixin

@login_manager.user_loader
def load_user(user_id):
    return User.query.get(int(user_id))

class User(db.Model,UserMixin):
    uid=db.Column(db.Integer(),primary_key=True)
    uusername=db.Column(db.String(30),nullable=False,unique=True)
    upassword =db.Column(db.String(30),nullable=False,unique=True)
    uaddress= db.Column(db.String(30))
    uphone=db.Column(db.Integer(),nullable=False,unique=True)

    # def __repr__(self):
    #     return f'{self.uusername}'
    
    @property 
    def password(self):
        return self.password

    def comparePassword(self,attemptedPassword):
        return attemptedPassword==self.upassword
    

标签: pythonflaskflask-login

解决方案


假设您已导入login_user上面未显示的代码,

def login_user():

正在掩盖它。当代码稍后执行时

login_user(attemptedUser)

它正在获取您的功能,而不是来自flask_login. 重命名您的函数。


推荐阅读