Я обычно заключаю этот тип логики в форму. Поскольку вы используете форму для проверки данных, вы также используете ее для отправки данных. Это имеет смысл, потому что форма уже знает о данных, их типах и т. Д. (Имеет словарь cleaned_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()
, как вы предложили
во втором примере кода.