使用 Jinja2 从 MongoDB/Flask 检索数据并在 HTML 页面中显示
Retrieve data from MongoDB/Flask and display it in an HTML page using Jinja2
我正在尝试检索与用户 ID 关联的数据并将其显示在 HTML 页面中。我在后端使用 MongoDB 和 Flask (PyMongo)。这对我来说是新事物,所以如果需要请要求更多说明,但我会尽力解释。
我有一个用户class:
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)
用户登录成功后,相信下面的代码是用来return用户关联数据的。
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 复制此技术。
我怎样才能做到这一点?或者是在用户登录后发送 AJAX 请求并以 JSON 格式获取用户关联数据的正确方法?
编辑:更多细节。
以下是为用户在登录后看到的 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
中问候用户。
我通过修改 User
class 解决了这个问题。这是我所做的,但我不确定这是否是正确的方法。
我在 User
class 中添加了以下内容以获取用户 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
中,我修改了return以包含ID:return User(u['user'], u['id'])
然后在 HTML 中,我尝试做的工作起作用了,它使用 Jinja2 来显示 ID:{{ current_user.id }}
我正在尝试检索与用户 ID 关联的数据并将其显示在 HTML 页面中。我在后端使用 MongoDB 和 Flask (PyMongo)。这对我来说是新事物,所以如果需要请要求更多说明,但我会尽力解释。
我有一个用户class:
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)
用户登录成功后,相信下面的代码是用来return用户关联数据的。
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 复制此技术。
我怎样才能做到这一点?或者是在用户登录后发送 AJAX 请求并以 JSON 格式获取用户关联数据的正确方法?
编辑:更多细节。
以下是为用户在登录后看到的 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
中问候用户。
我通过修改 User
class 解决了这个问题。这是我所做的,但我不确定这是否是正确的方法。
我在 User
class 中添加了以下内容以获取用户 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
中,我修改了return以包含ID:return User(u['user'], u['id'])
然后在 HTML 中,我尝试做的工作起作用了,它使用 Jinja2 来显示 ID:{{ current_user.id }}