如何在`类Counter(models.Model)中存储增量计数器变量:`因此数据库?

时间:2015-07-07 18:34:00

标签: django django-models

我正在建立/建立一个小型调查应用程序,旨在引导用户进行9次调查之一。它这样做我将URL附加到调查的名称,例如/surveyone//surveytwo/等。

每条路径/调查都应该看到最多次数,例如: PathMax = 3和竞争调查的总数(所有9条路径)不得超过20,例如TotalMax = 20

调查完成后,计数器会以done()方式递增,例如SurveyWizardOneCounter += 1,在为参与者分配路径时,会针对PathMax对其进行检查。

问题:

以下代码在我的本地计算机上运行正常,但在服务器上的计数器变量TotalMaxCounterSurveyWizardOneCounter永远不会超过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],            
        })  

1 个答案:

答案 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在此字段上计算。