我正在Django中编写一个小应用程序,并且我将状态保存在我声明的views.py中的方法中的一些变量中。以下是此文件的重要部分:
from app.playerlist import fullList
auc_unsold = fullList[:]
auc_teams = []
auc_in_progress = []
auc_current_turn = -1
print(auc_in_progress)
def auc_action(request):
data = json.loads(request.GET["data"])
# ...
elif data[0] == "start":
random.shuffle(auc_teams)
print(auc_unsold)
print(auc_in_progress)
auc_in_progress = [None, 0, None]
print(auc_in_progress)
auc_unsold
和auc_teams
变量工作正常;但是,此方法看不到auc_in_progress
变量,在标题中给出了错误。如果我取出print语句并让这段代码为它赋值,那么只要我再次使用该变量,代码中的异常就会被抛出。
我试过制作另一个变量,这个新变量似乎也遇到了这个问题。
发生了什么事?
编辑:我找到了一个解决方案:如果我在print语句之前写global auc_in_progress
,那么一切正常。如果我尝试写这个,因为我声明上面的变量它不起作用,但由于某种原因。
我对此不满意,因为我不知道为什么会发生这种情况,因为我不喜欢这样使用全球,但是呃。有人有解释吗?
答案 0 :(得分:1)
您绝对不应该使用原始代码或使用global
建议的解决方案。
模块级别的任何内容都将在请求之间共享,不仅针对当前用户,还针对该流程的所有用户。所以每个人都会看到同样的拍卖等。
错误的原因是因为您在函数中分配了该变量,这会自动使其成为局部变量:有关详细信息,请参阅this question。但是那里建议的解决方案与你的解决方法相同 - 即使用global
- 这里不合适;您应该将数据存储在与用户特定关联的某个位置,例如会话。