python - Flask Session 在 POST 请求之间不保留值
问题描述
所以我使用烧瓶来创建端点作为接收器和数据处理器。我有两个 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)
解决方案
显然我看到了两个小问题。第一个是
@app.route('/second_processor', methods=['POST']) `
只允许POST
方法,并且
redirect(url_for("second_processor"))
是一个GET
请求。而且您不能强制POST
提出请求。即使根据文档,函数中有一个_method
参数url_for
。
相关问题:在 Flask 中使用 url_for 发出 POST 请求
第二个问题是您在函数data
内部创建了变量first_processor
,但没有将其传递给second_processor
.
if 'key' in session:
print('OK')
else:
print("FAIL")
--> return data
你可以:
- 在会话内传递数据,
- 使数据全局化(虽然不确定这是否是一个好习惯)
- 将数据存储在文件或数据库中并在 second_processor 中读取。
推荐阅读
- visual-studio - node-gyp - 如何生成包含 NatVis 文件的 Visual Studio 项目
- c# - 用于验证数字到小数点后 2 位的正则表达式
- dynamics-crm - 有没有办法更新 CRM 中的字段修改、创建和创建?
- python - 如何让 ImageField 返回相对路径?
- python - Python 3.4 和 3.5 - JsonDecodeError 兼容性
- javascript - 评论字段中 Textarea 的表单验证
- javascript - 在 MVC CheckboxFor 中,如何通过 Javascript 更改选择?
- python - 从文件中分割行列表的“pythonic”方法是什么?
- c++ - C++ Visual Studio 错误:无法隐式捕获标识符,因为未指定默认捕获模式
- angular - 我得到了 _this._driver.validateStyleProperty is not a function