从HTML发送JSON变量到python(烧瓶)

时间:2018-09-03 13:16:48

标签: json sqlite flask

我有一个flask网站,数据来自sqlite3数据库。 我做了一个嵌套的下拉菜单,它是从JSON数组填充的。

现在,我进行了一个查询,该查询对从下拉菜单中选择的主题给出的主意数进行计数。但是我在那儿搁浅。如何将下拉菜单中的值传递给python中的查询?

有人知道如何解决这个问题吗?

编辑代码:

这是我用来将数据从sqlite转换为JSON的代码,因此我有一个下拉列表,该列表取决于先前的选择。

var keyValueDataHealthRight = {{ keyValueProjectsHealthcare|tojson }};
                var keyValueDataEnterpriseRight = {{ keyValueProjectsEnterprise|tojson }};
                var keyValueDataEntetainmentRight = {{ keyValueProjectsEntertainment|tojson }};

                var stateObjectRight = {
                    "Entertainment": keyValueDataEntetainmentRight,
                    "Healthcare": keyValueDataHealthRight,
                    "Enterprise": keyValueDataEnterpriseRight

                };
                window.onload = function Right() {
                    var divisonSelR = document.getElementById("DivisionRightFilter"),
                        projectSelR = document.getElementById("ProjectRightFilter"),
                        subProjectSelR = document.getElementById("SubprojectRightFilter");
                    for (var divisionR in stateObjectRight) {
                        divisonSelR.options[divisonSelR.options.length] = new Option(divisionR, divisionR);
                    }
                    divisonSelR.onchange = function Right() {
                        projectSelR.length = 1; // remove all options bar first
                        subProjectSelR.length = 1; // remove all options bar first
                        if (this.selectedIndex < 1) return; // done
                        for (var ProjectR in stateObjectRight[this.value]) {
                            projectSelR.options[projectSelR.options.length] = new Option(ProjectR, ProjectR);
                        }
                    };
                    divisonSelR.onchange(); // reset in case page is reloaded
                    projectSelR.onchange = function Right() {
                        subProjectSelR.length = 1; // remove all options bar first
                        if (this.selectedIndex < 1) return; // done
                        var subProjectsR = stateObjectRight[divisonSelR.value][this.value];
                        for (var i = 0; i < subProjectsR.length; i++) {
                            subProjectSelR.options[subProjectSelR.options.length] = new Option(subProjectsR[i], subProjectsR[i]);
                        }
                    }
                };

我的查询代码

SELECT  Ideastatus,COUNT(*) FROM Idea where project = '{{ variable }} ' GROUP BY ideaStatus ORDER BY IdeaStatus"

我遇到的问题是如何获取所选项目并将其传递给python,以便我可以在查询中使用它

1 个答案:

答案 0 :(得分:0)

您可以创建一个仅在Flask App中获得POST方法的视图!

类似这样的东西:

@app.route('/get-query', methods=['POST'])
def getQuery(data):
    # Example Query
    query = 'SELECT * FROM exampleTable WHERE someColumn = {}'.format(data)
    # Do stuff with query and return it
    return do_stuff(query)

您可以返回JSON函数,可以返回文本,可以返回HTML,甚至可以将用户重定向到其他视图。

即使您可以将methods=['GET', 'POST']添加到您正在使用的视图中,然后检查request.method是否为POST并且它是否具有data? 这样的事情会起作用

@app.route('/some-route', methods=['GET', 'POST'])
def someView(data=None):
    if request.method == 'POST':
        if data:
            # Do something with data and return
            return do_stuff(data)
        return "You have to provide data!", 400
    return render_template('some_template.html')

让我知道你是否不理解,以便我进一步解释