Flask Session不会在POST请求之间保留值

时间:2020-09-24 07:56:41

标签: python session flask

因此,我正在使用flask创建端点作为接收器和数据处理器。我有两个HTTP POST请求线程,第一个发送到第一个路由,第二个发送类似。问题是我希望仅在第一个处理器被触发时才触发第二个处理器,因此我创建了一个会话密钥,以验证第二个处理器的执行。

但是无论我做什么,当我将POST发送到第二个处理器时,会话密钥始终会被擦除。这是我的代码,已经简化了。请原谅我的业余能力来表达这个问题,我对编码非常陌生。

from flask import Flask, request, redirect, url_for, session

app = Flask(__name__)
app.secret_key = "abc"

@app.route('/first_processor', methods=['POST'])
def first_processor():
    data = {
        'message': 'json received',
        'json': request.json
    }
    cond = data['json']

    if cond['event'] == "message:received":
        session["key"] = cond['key']
        return redirect(url_for("second_processor"))
    else:
        return data

@app.route('/second_processor', methods=['POST'])
def second_processor():
    if "key" in session:
        print('OK')
    else:
        print("FAIL")
    return data

if __name__ == "__main__":
    app.run(debug=True)

1 个答案:

答案 0 :(得分:2)

显然我看到了两个小问题。第一个是那个

@app.route('/second_processor', methods=['POST']) `

仅允许使用POST方法,并且

redirect(url_for("second_processor"))

是一个GET请求。而且您不能强制执行POST请求。即使根据文档说明,_method 函数中也有一个url_for参数。
相关问题:Issue a POST request with url_for in Flask

第二个问题是您在data函数中创建了first_processor变量,但是没有将其传递给second_processor

 if 'key' in session:
        print('OK')
    else:
        print("FAIL")
-->    return data

您可以:

  • 在会话内传递数据,
  • 使数据具有全局性(虽然不确定这是否是一种好习惯)
  • 将数据存储在文件或db中,并在second_processor中读取它。
相关问题