Python 如何去除flask服务器代码中的全局变量?
在编写flask服务器时,我发现自己的处境与此类似:Python 如何去除flask服务器代码中的全局变量?,python,flask,global-variables,Python,Flask,Global Variables,在编写flask服务器时,我发现自己的处境与此类似: 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)}),
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
这里,我有两个方法,我正试图通过从客户机获取请求来调用它们。因此,当一个客户端向“/method_b”发出2个请求时,输出应该是4,依此类推。现在我的问题是,当服务器在真实的web中运行时,多个客户端将尝试调用其方法。因此,如果第一个客户机调用'/method_a'一次,他将得到输出1,同时其他客户机也将调用这些方法,从而更改x的值。因此,当第一个客户端在“/method_a”上发出第二个请求时,它将不会得到2的输出。但是我想制作一个服务器,它将变量值视为不同的客户端,并且只显示变量值的版本。我之所以使用全局变量,是因为这两个方法都需要这个变量才能运行,而且由于它们是由GET请求调用的,所以我无法通过客户端传递变量的值。如何处理这个问题?有没有更好的方法来编写此代码来解决上述问题?如果我理解正确,您可以使用cookies来实现这一点。将视图函数的代码更改为作为响应:
@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
您可以让客户机使用get请求返回其当前的
x
值。例如/方法a?电流=2
。这样,您就不需要在服务器端存储状态。