flask 验证登录问题

class User(db.Model):

__tablename__ = "user"
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(100), unique=True)
pwd = db.Column(db.String(510))
addtime = db.Column(db.DateTime, index=True, default=datetime.now)
userlogs = db.relationship("UserLog", backref="user")  # 会员日志外键关联
def __repr__(self):
    return "<User %r>" % self.name

def check_pwd(self, pwd):
    return check_password_hash(self.pwd, pwd)

def login():
    form = LoginForm()
    if form.validate_on_submit():
        data = form.data
        user = User.query.filter_by(name = data["name"]).first()
        print(user)
        print(data)
        if user.check_pwd(data['pwd']):
            userlog = UserLog(
                user_id=user.id,
                ip=request.remote_addr
            )
            db.session.add(userlog)
            db.session.commit()
            session["name"] = user.name
            return redirect(url_for("home.user"))
    return render_template("home/login.html", form=form)

image.png
image.png
如图 经过调试我发现,image.png
和数据库是可以连上的,但是user这句出现了问题,导致user打印出来是None,所以导致错误,请问是哪里的问题呀,是不是我数据库的问题?现在的错误是输入任何账号密码都到错误页面,而不是密码验证错误,真是头疼

回复
阅读 1.4k
2 个回答

pring(data["name"])看下取到用户名没有?另外手动用python shell的方式执行User.query.filter_by(name = "123").first()能正常返回user对象吗?如果还不行debug一下User.query这句代码。

if user.check_pwd(data['pwd']):判断之前,需要判断user 是不是真的取到了。

if user and user.check_pwd(data['pwd']):

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏