使用 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.htmldashboard.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 }}