Django Python-变量似乎正在被缓存?

问题描述

在我的Django应用程序中,我获得了Google Cloud Organization中具有以下内容的项目列表:

try:
    global projectdicts
    projectdicts = cloudresmanv1.projects().list().execute()
    projectdicts = projectdicts.get('projects')
except Exception as e:
    logging.error(e)

以上内容取自称为ProjectForm的Django形式。 但是,在创建GCP项目并在Django应用中再次浏览到ProjectForm页面之后,该列表不会更新以显示新创建的项目。我的理解是,无论如何,应该再次执行以上操作。

如果我手动运行脚本,当然会更新 projectdicts 变量。因此,这使我相信出于某种原因,Django应用程序或Python正在缓存该变量,而又不想再次运行上面的代码

这可能是问题吗?如果是这样,我每次浏览到ProjectForm页面时,如何强制Django / Python重新运行脚本的这一部分,以确保GCP项目列表得到更新?

编辑09/09/2020: 这是完整表格,如评论所要求:

class ProjectForm(forms.Form):
    client = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Client Name (lowercase)'}),validators=[RegexValidator(r'^[a-z]+$','Enter a valid client name (only lowercase letters)')])
    stage = forms.ChoiceField(choices=TYPES)
    folder = forms.ChoiceField(choices=FOLDERS,required=False,label='')
    purpose = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Project Purpose (lowercase; digit optional)'}),validators=[RegexValidator(r'^[a-z-]+[1-9]?$','Enter a valid purpose (only lowercase letters,with a single optional digit)')])
    computeapi = forms.BooleanField(required=True,initial=True,label='Compute Engine')
    deploymentmanapi = forms.BooleanField(required=False,label='Deployment Manager')
    storagecompapi = forms.BooleanField(required=False,label='Storage Components')
    monitorapi = forms.BooleanField(required=False,label='Monitoring')
    loggingapi = forms.BooleanField(required=False,label='Logging')

    def clean(self):
        form_data = super(ProjectForm,self).clean()
        projectname = form_data['client'] + "-" + form_data['stage'] + "-" + form_data['purpose']
        client = form_data['client']
        purpose = form_data['purpose']
        for projectdict in projectdicts:
            if projectname == projectdict['name']:
                raise ValidationError(projectname + " already exists! Please try another name.")
        
        if not re.match("^[a-z-]+[1-9]?$",purpose):
            raise ValidationError(purpose + " does not comply with the Regex parameters.")
        
        if not re.match("^[a-z]+$",client):
            raise ValidationError(client + " does not comply with the Regex parameters.")
        return form_data
        
    def __init__(self,*args,**kwargs):
        super().__init__(*args,**kwargs)
        self.helper = FormHelper()
        self.helper.add_input(Button('back','Back',css_class='button button--wide button--black',onclick="window.location.href = '{}';".format(reverse('home'))))
        self.helper.add_input(Submit('next','Next',css_class='button button--wide button--white'))
        self.helper.layout = Layout(
            Fieldset(
                'Project Name',Row(
                    Column('client',css_class='form-group col-md-4 mb-0'),Column('stage',Column('purpose',)
            ),Fieldset(
                'Folder Name',Row(
                    Column('folder',css_class='form-group col-md-4 mb-0')
                )
            ),Fieldset(
                'APIs To Enable',Row(
                    Column('computeapi',css_class='form-group col-md-3 mb-0'),Column('deploymentmanapi',Column('storagecompapi',Column('monitorapi',Column('loggingapi',css_class='form-group col-md-3 mb-0')
                )
            ),)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)