【问题标题】:redirecting on flask from a 'POST' route to a 'GET' route在烧瓶上从“POST”路由重定向到“GET”路由
【发布时间】:2019-12-15 04:09:22
【问题描述】:

如果满足某些条件,我想从方法已设置为“POST”的路由重定向到另一个 url(默认方法为“GET”的路由)。当我从终端检查时,“GET”路由被调用,但重定向不会从浏览器发生。我正在使用“url_for”在烧瓶中执行此操作。有什么帮助吗?

我尝试在url_for 中使用_method 参数,即return redirect(url_for('second', _method='GET')

这里有一些代码:

@app.route('/first', methods=['POST'])
def first():
    some_data = request.get_json(force=True)
    if some_data is None:
       return redirect(url_for('second', _method='GET'))
     session['data_to_use'] = some_data
    return jsonify(some_data)
@app.route('/second')
def second():
    return render_template('second.html')

这是我在终端上得到的:

"POST /first HTTP/1.1" 302 -
 "GET /second HTTP/1.1" 200 -

【问题讨论】:

  • 你的问题我不清楚。你在终端上是什么意思?你在浏览器中看到了什么?是否调用了错误?
  • 完全使用 @Wimanicesir 。请记住,终端正在记录所有重定向和其他内容,供您调试和检查。如果您看到“第二条”路线调用了 Get 方法,那么它确实是使用 Get 方法调用的。
  • @Wimanicesir 我的意思是当我从终端检查日志时。此外,在浏览器上调用没有错误,

标签: python redirect flask url-for


【解决方案1】:

您确定您的“some_data”值为无吗?重定向通常只适用于普通的 url_for 用法,即使您是从 post 重定向到 get,如下所示:

@app.route('/first', methods=['POST'])
def first():
    some_data = request.get_json(force=True)
    if some_data is None:
        return redirect(url_for('second'))
    session['data_to_use'] = some_data
    return jsonify(some_data)

【讨论】:

    【解决方案2】:

    您可以只返回呈现模板的函数的名称

    @app.route('/first', methods=['POST'])
    def first():
        some_data = request.get_json(force=True)
        if some_data is None:
           return second()
         session['data_to_use'] = some_data
        return jsonify(some_data)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-19
      • 1970-01-01
      • 2020-07-04
      • 1970-01-01
      • 1970-01-01
      • 2015-11-24
      相关资源
      最近更新 更多