如何在Flask中将变量从模板传递到视图?

时间:2014-10-28 19:28:05

标签: flask

例如:应用程序的每个用户都有一些点,并且它们保存在数据库中(当然)

当用户访问页面/个人资料时,模板会向他显示{{ points }}

但是如果他点击一个按钮,我想减少一些用户点数(例如10个)。我认为这应该是这样的:

Template.html:

Your points: {{ current_user.points }} <a href="{{ url_for('index') }}" button type="submit" class="btn btn-success" name="reduce">Reduce it!</button></a>

但我怎样才能获得传递信号&#34;减少&#34;查看?

1 个答案:

答案 0 :(得分:0)

您已获得所需的所有信息。您知道哪个用户点击了current_user代理中的链接(我假设您因此使用了flask-login或flask-security)。因此,提交目标的路由只需要从数据库中获取用户点,调整它并提交它。

如果你正在使用像Flask-Sqlalchemy这样的东西,它可能就是:

@login_required
@app.route('/reduce/')
def reduce_points():
    current_user.points -= 10
    db.session.commit()
    return 'Points Reduced!'

使用模板呈现指向{{ url_for('reduce_points') }}的链接。

让我们假设您想要一个处理几个不同操作的视图 - 您可以为每个按钮创建一个表单,其中包含您想要的操作:

<form method='post' target="{{ url_for('actions') }}">
<input type="hidden" name="action" value="reduce"/>
<input type="submit" value="Reduce!"/>
</form>

然后你的应用程序的路径代码可以只查找名为action的表单元素 - 然后使用基于它的值的逻辑来决定要做什么。如果你正在处理表格,还要仔细阅读CSRF保护(Flask-WTF免费提供给你),保存用户意外点击按钮几次并将他们的帐户归零。