如何正确重定向POST端点

2024-04-27 02:52:45 发布

您现在位置:Python中文网/ 问答频道 /正文

在Flask中有一个比较复杂的端点,当前部署到服务器上:

@app.route('/whatever', methods=['GET', 'POST'])
def somefunct:
    if request.method = 'POST':
        << do some stuff >>

    << do some other stuff >>
    return render_template('sometemplate.html', **<<variable dict>>)

推到一个模板。在

sometemplate.html有点棘手,它包含一个从变量字典中提取数据的表,还提供了一个允许用户与之交互的下拉列表:

^{pr2}$

然后我有一些javascript来触发右POST操作(jQuery已加载):

$(document).ready(function() {
    {% for item in << variable in dict >> %}

    var form{{ item }} = $('category-form-{{ item }}');

    form{{ item }}.find('#{{ item }}').change(function(){
        $.ajax({
            type: "POST",
            url: form{{ item }}.attr('action'),
            data: form{{ item }}.serialize(),
            success: function(response){
                console.log("calling {{item}}")
            }
        });
    });

    {% endfor %}
});

所有这些在开发环境中都能正常工作,但是当我推到我们的服务器时,javascript控制台中出现500错误。我的怀疑是request对象发生了一些奇怪的事情——我已经能够缩小范围,我得到了一个以前在尝试解析它时没有遇到的错误。在

作为故障排除的一部分,由于我运行的是Apache服务器,无法轻松访问输出,因此我认为最好按如下方式重做端点:

@app.route('/whatever', methods=['GET', 'POST'])
    if request.method = 'POST':
        << do some stuff >>
        variable = << variable to test >>
        return render_template('test.html', **{"variable"=variable})

    << do some other stuff >>
    return render_template('sometemplate.html', **<<variable dict>>)

建立测试.html只是为了:

{{ variable }}

(周围有正确的方块等)

但是,当我试图实现这个功能时,在从下拉列表中选择了一些内容之后,它不会重定向到test.html,尽管我可以从javascript控制台和代码中创造性地使用return语句看出它正在跟踪端点的正确部分。在

我的猜测是这与我的javascript设置方式有关,但基本上我希望能够重定向到test.html,以便查看请求对象的外观以及它的格式错误的原因。在

在这种情况下,我如何进行重定向?在

当然,如果您对这段代码在运行localhost时为什么不能在服务器上运行有任何想法,我也会全神贯注地听:)


Tags: testform服务器returnrequesthtmlsomejavascript