python - 如何摆脱烧瓶服务器代码中的全局变量?
问题描述
在编写烧瓶服务器时,我发现自己处于与此类似的情况:
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,依此类推。现在我的问题是,当服务器在真实网络中运行时,多个客户端会尝试调用它的方法。所以如果第一个客户端调用'/method_a'一次,他得到输出1,同时其他客户端也会调用方法,从而改变x的值。因此,当第一个客户端在“/method_a”上发出第二个请求时,它不会得到输出为 2。
但是我想创建一个服务器,它将变量值视为不同客户端的不同值,并仅向它们显示变量值的版本。我正在使用全局变量,因为这两种方法都需要此变量才能起作用,并且由于它们是由 GET 请求调用的,因此我无法通过客户端传递变量的值。如何解决这个问题?有没有更好的方法来编写这段代码来解决上述问题?
解决方案
如果我理解正确,您可以使用 cookie 实现此目的。更改视图函数的代码以设置 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
推荐阅读
- javascript - 中断 JavaScript 后返回项目
- python - 检查数字是否为素数的最佳方法?
- mysql - 在Mysql中选择具有多个WHERE子句的行
- python - 如何从图像中裁剪轮廓部分(超过 1 个)并为颜色直方图选择水平部分
- python - file.py 运行但 file.exe 不运行
- ansible - Ansible 中的变量替换
- sql - SQL Counting Rows by Identifier Cust_ID:我需要计算具有 2 个条件的行。太极数据
- angular - Angular - 页面重新加载后,来自 sharedService 的 BehaviorSubject 在组件中为空
- python - Python:BeautifulSoup 用 FindAll 获取所有文本数据
- django - Djoser 权限类问题