单击HTML按钮以更新Flask中的SQLAlchemy数据库

时间:2018-03-13 21:50:14

标签: python flask jinja2 flask-sqlalchemy

我正在尝试更新名为“收藏夹”的数据库值''对于使用按钮单击的Flask Web应用程序的登录用户。从本质上讲,收藏夹列是一个单独的字符串,如下所示:Apples, Bananas, Oranges在按钮单击的位置,我想通过将字符串拆分为一个列表来追加一个值(比如Cherries@app.routes(),附加值,并在提交更改之前将其重新加入字符串。我不确定这样做的正确方法,这就是我所拥有的:

HTML代码段

<button action="{{ url_for('add') }}" method="post" type="submit">Favorite</button>

@ app.routes()

@app.route('/add', methods=['POST'])
def add():
    star_faves = current_user.favorites
    star_faves_list = star_faves.split(', ')
    star_faves_list.append('Cherries')
    ', '.join(star_faves_list)
    current_user.favorites = star_faves_list
    db.session.commit()
    return render_template('add.html')

问题在于我并不真正理解HTML如何与Python / Jinja进行通信,如果有人能帮助清除它,我会非常感激。

1 个答案:

答案 0 :(得分:1)

看起来你的某些元素很混乱。

如果您要向/add页面提交POST请求,最简单的方法是创建表单。 (按钮没有动作或方法属性,表单可以。)创建表单时,还要指定提交表单时要使用的HTTP方法。所以在你的情况下,它看起来应该是这样的:

<form action="{{ url_for('add') }}" method="POST">
     <input type="submit" value="Favorite">
</form>

您可以使用按钮代替带有提交类型的输入,它们是interchangeable

如果您不希望在提交请求时重新加载页面,则可以使用JavaScript的更高级技术称为AJAX

此示例代码将相同的POST请求发送到/add页面:

var request = new XMLHttpRequest();
request.onreadystatechange = function () {
    // this method gets called if the state of the request changes (it succeeds of fails)
    // you will probably want to update your page accordingly here
};
request.open('POST', '/add');
request.send();