【问题标题】:Flask render_template after AJAX post callAJAX后调用后的烧瓶渲染模板
【发布时间】:2021-04-02 08:22:52
【问题描述】:

我正在构建一个项目,在该项目中,我从用户网络摄像头获取图像,并通过 AJAX 调用将其作为 base64 字符串返回给 Flask。但是,我希望在服务器端处理图像后重定向我的用户。我曾尝试使用 render_template() 但似乎 render_template 根本没有被执行。我也尝试过重定向,但这也没有用。下面是我正在处理的代码。

index.js

$.ajax({  
      type: 'POST',  
      url: '/upload',  
      data: {imagebase64: imagebase64data},  
  }).done(function (){  
    console.log(imagebase64data)  
  });  

ma​​in.py

@app.route('/success')
def success():
  return render_template('success.html')

@app.route('/fail')
def success():
  return render_template('fail.html')

@app.route('/upload', methods=['GET', 'POST'])
def get_image():
  img_ret = readb64()
  if(prev_img(img_ret)): #this function returns a boolean and based on that I have to redirect
      return redirect(url_for("success")) #this line has no effect
  else:
      return redirect(url_for("fail"))

谁能告诉我我做错了什么?或者有什么方法可以在特定条件下重定向用户?

【问题讨论】:

    标签: javascript python ajax flask redirect


    【解决方案1】:

    您的 AJAX 函数访问服务器,服务器执行操作,然后服务器以 redirect(...) 的结果响应。然后,您的 AJAX 调用会收到该响应,但不会对其执行任何操作。首先,您可能不想在 AJAX 调用中收到 Flask 的redirect 生成的响应。

    您可以通过多种方式来处理重定向。如果您想继续使用 AJAX,您需要从 /upload 端点返回 JSON 响应,其中包含一些可用于 index.js 中的 AJAX 请求函数的信息,指示上传成功或失败。然后,您可以使用该信息重定向using window.location.replace(...) on the client-side。以see here为例。

    另一种选择是使用 HTML 表单。这对 Flask 来说很简单,如果您使用 Flask-WTF 之类的库,这也很容易确保安全。这将允许您使用 Flask 中的 redirect 函数,并使您的 AJAX 调用变得多余。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-09
      • 2018-03-25
      • 1970-01-01
      • 1970-01-01
      • 2022-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多