这个问题在这里已有答案:
在编写烧瓶服务器时,我发现自己处于类似这样的情况:
from flask import Flask, jsonify
app = Flask(__name__)
x = 0
@app.route('/method_a', methods=['GET'])
def method_a():
global x
x = x + 1
return jsonify({'mesaage': 'value of x incremented by 1 is: '+str(x)}), 200
@app.route('/method_b', methods=['GET'])
def method_b():
global x
x = x + 2
return jsonify({'message': 'value of x increased by 2 is: '+str(x)}), 200
在这里,我有两个方法,我试图通过客户端的GET请求调用。因此,当单个客户端向'/ method_b'发出2个请求时,输出应为4,依此类推。现在我的问题是,当服务器将在真实的Web中运行时,多个客户端将尝试调用其方法。因此,如果第一个客户端调用'/ method_a'一次,他将获得输出1,同时其他客户端也将调用这些方法,从而更改x的值。因此,当第一个客户端在'/ method_a'上发出第二个请求时,它将不会将输出作为2。 但我想制作一个服务器,将不同客户端的变量值视为不同,并仅显示它们的变量值版本。我正在使用全局变量,因为这两个方法都需要此变量才能运行,并且由于它们是由GET请求调用的,因此我无法通过客户端传递变量的值。如何解决这个问题?是否有更好的方法来编写此代码来解决上述问题?
如果我理解正确,您可以使用cookie实现此目的。将视图函数的代码更改为set the cookie作为响应:
@app.route('/method_a', methods=['GET'])
def method_a():
x = request.cookies.get('xcookie', 0)
x = x + 1
response = jsonify({'mesaage': 'value of x incremented by 1 is: '+str(x)})
response.set_cookie('xcookie', x)
return response