我正在建立/建立一个小型调查应用程序,旨在引导用户进行9次调查之一。它这样做我将URL附加到调查的名称,例如/surveyone/
,/surveytwo/
等。
每条路径/调查都应该看到最多次数,例如: PathMax = 3
和竞争调查的总数(所有9条路径)不得超过20,例如TotalMax = 20
调查完成后,计数器会以done()
方式递增,例如SurveyWizardOneCounter += 1
,在为参与者分配路径时,会针对PathMax
对其进行检查。
问题:
以下代码在我的本地计算机上运行正常,但在服务器上的计数器变量TotalMaxCounter
和SurveyWizardOneCounter
永远不会超过1.我相信这是因为它们会重置为文件顶部的0
。
谁能告诉我如何通过这个?我可以/应该在哪里存储计数器变量,以便我可以更新它们并在不被覆盖的情况下访问它们?
猜疑:
我相信我应该将这些计数器变量存储在模型/数据库中,例如class Counter(models.Model):
但我不确定如何执行此操作或如何访问它们。
我之前从未真正使用/学过数据库,并且设法设置一个(MySQL)来存储一个Person模型和我的调查应用程序中的数据。
views.py
PathMax = 3
TotalMax = 20
TotalMaxCounter = 0
SurveyWizardOneCounter = 0
SurveyWizardTwoCounter = 0
SurveyWizardThreeCounter = 0
SurveyWizardFourCounter = 0
SurveyWizardFiveCounter = 0
SurveyWizardSixCounter = 0
SurveyWizardSevenCounter = 0
SurveyWizardEightCounter = 0
SurveyWizardNineCounter = 0
def begin(request):
global TotalMaxCounter
if TotalMaxCounter < TotalMax:
survey_url = random.choice(SURVEY_URLS)
print 'You are looking at:', survey_url
if survey_url == '/surveyone/':
if SurveyWizardOneCounter > PathMax:
SURVEY_URLS.pop(0)
elif survey_url == '/surveytwo/':
if SurveyWizardTwoCounter > PathMax:
SURVEY_URLS.pop(1)
elif survey_url == '/surveythree/':
if SurveyWizardThreeCounter > PathMax:
SURVEY_URLS.pop(2)
elif survey_url == '/surveyfour/':
if SurveyWizardFourCounter > PathMax:
SURVEY_URLS.pop(3)
elif survey_url == '/surveyfive/':
if SurveyWizardFiveCounter > PathMax:
SURVEY_URLS.pop(4)
elif survey_url == '/surveysix/':
if SurveyWizardSixCounter > PathMax:
SURVEY_URLS.pop(5)
elif survey_url == '/surveyseven/':
if SurveyWizardSevenCounter > PathMax:
SURVEY_URLS.pop(6)
elif survey_url == '/surveyeight/':
if SurveyWizardEightCounter > PathMax:
SURVEY_URLS.pop(7)
elif survey_url == '/surveynine/':
if SurveyWizardNineCounter > PathMax:
SURVEY_URLS.pop(8)
return render(request, 'Begin.html', {'survey_url': survey_url})
else:
return render(request, 'surveyfull.html')
class SurveyWizardOne(SessionWizardView):
def get_context_data(self, form, **kwargs):
context = super(SurveyWizardOne, self).get_context_data(form, **kwargs)
...
....
return context
def done(self, form_list, **kwargs):
global SurveyWizardOneCounter
global TotalMaxCounter
SurveyWizardOneCounter += 1
TotalMaxCounter += 1
logger.debug('\n\n SurveyWizardOneCounter = %s', SurveyWizardOneCounter)
logger.debug('\n\n TotalMaxCounter = %s', TotalMaxCounter)
for form in form_list:
form.save()
return render(self.request, 'Return_to_AMT.html', {
'form_data': [form.cleaned_data for form in form_list],
})
答案 0 :(得分:1)
不要在Web应用程序中的全局变量中保存任何内容。请求在不同的会话中处理,很可能是不同的python解释器实例,在一个会话中设置的全局变量在另一个会话中不可见。
计数器可以保存在数据库中,作为@:enum
abstract AnEnum(Int)
{
var A = 1;
var B = 2;
var C = 3;
}
class Test3
{
static function main()
{
nowItWorks();
}
static function nowItWorks(param = AnEnum.A)
{
trace(param);
}
}
模型中的额外字段,总计数可以由Survey
在此字段上计算。