【发布时间】:2018-09-17 15:19:31
【问题描述】:
我正在开发一个 Flask 服务器,用于通过网络在一些后端 Python 功能和 Javascript 客户端之间进行通信。我正在尝试利用 Flask 的 session 变量在用户与应用程序交互的过程中存储用户特定的数据。我已经删除了下面的大部分应用程序特定代码,但我遇到的核心问题仍然存在。
这是我的(简化的)Flask 应用程序的代码:
import json
import os
from flask import Flask, jsonify, request, session
app = Flask(__name__)
app.secret_key = 'my_secret_key'
@app.route('/', methods=['GET'])
def run():
session['hello'] = 'world'
return jsonify(session['hello'])
@app.route('/update', methods=['POST'])
def update():
return jsonify(session['hello'])
if __name__ == '__main__':
app.run(host='0.0.0.0')
使用 Postman,我可以向我的服务器发出 GET 请求并接收"world" 的预期输出。然后,我可以使用任意正文发出 POST 请求,并收到与 "world" 相同的预期输出(再次使用 Postman)。
使用 Chrome 时,我可以访问我的服务器 IP 并在页面上看到预期的输出 "world"。我还可以使用 Javascript(在 Chrome 的控制台中)手动发出 GET 请求,并收到与预期相同的响应。但是,当尝试使用 Javascript 向服务器发送 POST 请求时出现了我的问题;服务器在尝试发出此请求时显示KeyError: 'hello'。
这是我用来发出 POST 请求的 Javascript:
var url = 'http://my_server_ip/update';
fetch(url, {
method: 'POST',
body: JSON.stringify('arbitrary_string'),
headers: new Headers({
'Content-Type': 'application/json'
})
})
.then(response => response.json())
.then((data) => {
console.log(data);
})
这里出了什么问题?为什么我可以使用 Postman 发出 GET/POST 请求,但使用 Javascript 发出相同请求时却遇到错误?
【问题讨论】:
-
您应该使用在请求“/”之后获得的 cookie 发布您的请求。
-
令人惊讶的是,GET 在返回
world的 JavaScript 请求中起作用。我尝试使用会话 cookie 标头,但 POST 请求仍然失败。
标签: javascript python json session flask