因此,我正在使用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)
答案 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
您可以: