我正在尝试检索与用户ID关联的数据并将其显示在HTML页面中。我在我的后端使用带有Flask(PyMongo)的MongoDB。这对我来说是新的,所以如果需要请求更多说明,但我会尽力解释。
我有一个User类:
class User():
def __init__(self, user):
self.user = user.upper()
# self.id = id
def is_authenticated(self):
return True
def is_active(self):
return True
def is_anonymous(self):
return False
def get_id(self):
return self.user
# return self.id
@staticmethod
def validate_login(password_hash, password):
return check_password_hash(password_hash, password)
用户成功登录后,我相信以下代码用于返回用户关联数据。
lm = LoginManager()
@lm.user_loader
def load_user(user):
u = app.config['MY_USERS'].find_one({"_id": user})
if not u:
return None
print "\n"
print "my ID is " + str(u['id'])
print "\n"
return User(u['user'])
我可以看到" ID"我的用户在控制台中。但是我无法在HTML页面中显示该ID。我能够使用Hello, {{ current_user.user }}
在我的HTML中看到用户名,但我无法为ID复制此技术。
我怎样才能做到这一点?或者是用户登录并以JSON格式获取用户关联数据后发送AJAX请求的正确方法?
编辑:更多细节。
以下是为用户在登录后看到的login.html
和dashboard.html
呈现HTML页面的代码。
@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if request.method == 'POST' and form.validate_on_submit():
user = app.config['MY_USERS'].find_one({"_id": form.user.data.upper()})
if user and User.validate_login(user['password'], form.password.data):
user_obj = User(user['_id'])
login_user(user_obj)
flash("Logged in successfully!", category='success')
return redirect(request.args.get("next") or url_for("dashboard"))
flash("Wrong username or password!", category='error')
return render_template('login.html', title='Login', form=form)
登录后,Hello, {{ current_user.user }}
会在dashboard.html
中向用户致意。
答案 0 :(得分:0)
我通过修改我的User
课来解决这个问题。这是我做的,但我不确定这是否是正确的方法。
我在User
类中添加了以下内容以获取用户ID:
def get_id(self):
return self.user
return self.id
然后在同一文件中修改def __init__
以包含ID:
def __init__(self, user, id):
self.user = user.upper()
self.id = id
在load_user
中,我修改了返回以包含ID:return User(u['user'], u['id'])
然后在HTML中我尝试做的工作,即使用Jinja2显示ID:{{ current_user.id }}