Когда я должен отправить результаты моей формы Django?

1
задан Chris R 19 August 2010 в 20:32
поделиться

2 ответа

валидация и выполнение

Без выполнения или изменения состояния в форме clean(). Пожалуйста. Функция clean() формы должна работать только с данными на форме, а не где-либо еще.

Если происходит изменение состояния, оно должно быть в функции представления внутри не-GET обработчика запроса.

2
ответ дан 2 September 2019 в 21:59
поделиться

Обычно я инкапсулирую логику такого типа в форму. Поскольку вы используете форму для проверки данных, вы также используете ее для отправки данных. Это имеет смысл, поскольку форма уже знает о данных, их типах и т.д. (у нее есть словарь clean_data).

Но обработка данных и изменение состояния вашего приложения не должны находиться непосредственно внутри вашей логики валидации (например, в методе clean). Вы должны поместить ее в дополнительный метод вашей формы - как ModelForm делает это с помощью метода save().

Поэтому я предлагаю иметь дополнительный метод с именем save() (если метод действительно сохраняет вашу обработку в REST-сервис) или post_result() или что-то подобное, что подходит лучше.

Вот пример:

# forms.py

class ValidateDataForm(forms.Form):
    ...

    def clean(self):
        # validation logic

    def save(self):
        post_results_to_service(self.cleaned_data)

# views.py

def view(request):
    if request.method == 'POST':
        form = ValidateDataForm(request.POST)
        if form.is_valid():
            form.save()
    else:
        form = ValidateDataForm()

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

В этом случае код должен идти в метод clean(), как вы предложили в вашем втором примере кода.

0
ответ дан 2 September 2019 в 21:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: