在flask应用程序中,如何根据视图中发现的条件在ajax发布期间重定向到新页面?

mul*_*mul 1 javascript python ajax jquery flask

在我的烧瓶应用程序中,我有一个销售页面,该页面收集信息并通过 ajax 发布请求将其保存到数据库中。可供用户记录销售情况的控制台数量有限。用户可以从另一个用户接管控制台,但在这种情况下,我希望初始用户无法访问控制台。在销售页面的视图中检索到的控制台数据具有确定这一点所需的信息(在每次新销售后可用)。

我知道我不能在视图中使用标准的“返回重定向(url_for('dup_console'))”来做到这一点,因为我是通过ajax 调用发布的。

我花了很多时间搜索 SO 并找到了建议在 ajax 调用的成功部分执行条件逻辑的解决方案

例子:

success: function(data) {
    if (data.redirect) {
        window.location.href = data.redirect;
    }
}
Run Code Online (Sandbox Code Playgroud)

我不确定这是否适用于我的情况,因为我无法弄清楚如何将控制台数据从视图获取到成功例程。当我检查来自成功例程的响应信息时,它包含页面中的 html。

有没有办法从视图中获取我需要的信息到ajax帖子的成功例程?

这是我的代码的一部分(我已尝试将其简化为相关部分):

查看 - sales_console

@main.route('/sales_console/<int:id>', methods=['GET', 'POST'])
@login_required
def sales_console(id):
    product_data = get_product_data()
    console_data = get_console_data(id)
    if request.method == 'POST':
        returned_data = json.dumps(request.get_json())
        returned_data_dict = ast.literal_eval(returned_data)

        <review returned data and store in database>

        <retrieved data indicates if console id used by other device>
        if duplicate_console:
            redirect to page indicating console loss (I know I can’t do it like this)

return render_template('sales_console.html', product_data=product_data, console_data=console_data)
Run Code Online (Sandbox Code Playgroud)

可用于 sales_console.html 模板的 Java Script 例程

function record_sale(event,track_sales_data,console_number)
{
    var sales_data_json = JSON.stringify(track_sales_data);
    var url = "/sales_console/"+console_number;
    $.ajax({
        url: url,
        type : "POST",
        data: sales_data_json,
        contentType:"application/json",
        success: function(response) {
            console.log("success!!!");
            console.log(response);
        },
        error: function(error) {
            console.log("failure!!!");
            console.log(error);
        }
    });
};
Run Code Online (Sandbox Code Playgroud)

Lui*_*duz 5

在 python 中,返回你想在成功时重定向的任何路径作为你返回的 json 对象的一部分,如下所示:

from flask import jsonify

# ...

if request.method == 'POST':
  # ...
  return jsonify(dict(redirect='path'))
Run Code Online (Sandbox Code Playgroud)

在 javascript 中,将返回的路径分配给location.href属性,以触发重定向。像这样:

// ...
success: function(response) {
  if (response.redirect) {
    window.location.href = response.redirect;
  }
}
Run Code Online (Sandbox Code Playgroud)