从MongoDB / Flask检索数据并使用Jinja2将其显示在HTML页面中

时间:2016-02-23 19:26:02

标签: python mongodb flask jinja2

我正在尝试检索与用户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.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中向用户致意。

1 个答案:

答案 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 }}