所以我有一个sqlite-db文件,我使用python脚本生成了该文件,我正在读取该文件,以向Flask端点提供信息。
端点解析数据库中的项目,并生成一个dict对象,我随后将其传递给Jinja模板:
@app.route('/endpoint', method=['GET', 'POST'])
def someFunction:
<< generate finalDict via db queries >>
return render_template('whatever.html', **"finalDict": finalDict})
whatever.html
然后呈现引导表,即
<table>
<tr>
<th>
Header 1
</th>
...
</tr>
<tr>
<td>
{{ finalDict['someitem'] }}
</td>
...
</tr>
</table>
到目前为止,一切都很好,正如我所希望的那样。
我想做的是在我的表中有一个最后一列,它将包含一个下拉菜单,允许用户对该行中的项目进行分类。
因此,如果行看起来像ID | name | whatever
,那么它将有一个最终的| [dropdown]
,它将允许用户选择一个分类,这将始终是三种可能性之一。
我真正想知道的是如何构建HTML,大概还有端点中的if request.method == 'POST':
捕获,以适当地更新数据库。
是否可以将整个表视为form
对象,然后在用户使用上面的catch单击提交按钮后对其进行解析?
如果没有,考虑到我在这里想做的事情,构建事物的最佳方式是什么?
我真正想知道的是如何构建HTML
你会想要一个简单的HTML选择与你的3个选项:
<form name="category_form" id="category_form" action="/endpoint">
<select name='category' id='category'>
<option value='1'>Option 1</option>
<option value='2'>Option 2</option>
<option value='3'>Option 3</option>
</select>
</form>
然后,当选择下拉菜单时,使用ajax POST到您的端点。例如,使用jQuery:
$(document).ready( function() {
var form = $('#category_form');
form.find('#category').change(function(){
$.ajax({
type: "POST",
url: form.attr('action'),
data: form.serialize(),
success: function(response) {
//optionally do something
}
});
});
});
大概是在端点中执行if request.method=="POST":catch,以适当地更新数据库。
你就是这么做的:-)
if request.method == 'POST':
data = request.form
#do something with data
data
将是您提交给端点的表单中的数据。
查看请求对象的文档以及如何使用它。