Django Python — переменная, похоже, кэшируется?

#python #django #caching

#python #django #кэширование

Вопрос:

В моем приложении Django я получаю список проектов в нашей облачной организации Google со следующим:

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

Приведенное выше взято из формы Django под названием ProjectForm.
Однако после того, как я создал проект GCP и снова перешел в своем приложении Django на страницу ProjectForm, список не обновляется, чтобы показать вновь созданный проект. Я понимаю, что она должна снова выполнить вышеуказанное, независимо.

Если я запускаю скрипт вручную, переменная projectdicts, конечно, обновляется. Итак, это наводит меня на мысль, что по какой-то причине приложение Django или Python кэширует переменную и не утруждает себя повторным запуском вышеупомянутого.

Это вероятная проблема? И если да, то как мне заставить 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', css_class='form-group col-md-4 mb-0'),
                    Column('purpose', css_class='form-group col-md-4 mb-0'),
                )
            ),
            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', css_class='form-group col-md-3 mb-0'),
                    Column('storagecompapi', css_class='form-group col-md-3 mb-0'),
                    Column('monitorapi', css_class='form-group col-md-3 mb-0'),
                    Column('loggingapi', css_class='form-group col-md-3 mb-0')
                )
            ),
        )
  

Комментарии:

1. возможно global projectdicts ?

2. Есть ли причина, по которой глобальная переменная кэшируется и не обновляется? Извините, я новичок в этом, и использование глобальной переменной, хотя, возможно, нелогичной, было единственным способом, которым я мог использовать ее в новом классе при очистке данных формы.

3. Не могли бы вы поделиться формой, пожалуйста? Или, по крайней мере, покажите, где объявлена и используется переменная.

4. Конечно, теперь это обновлено.