Опять поймал себя на быстром «прими данные и сохрани», потом заметил инъекцию через пустой ввод и другие дыры. Признаться, разозлился — на свои же «быстрые» формы. Так добрался до нормальной валидации: не «сохранить что пришло», а «сначала проверить, а потом сохранить».
Нейтрально: форма Django собирает данные, валидирует их (обязательность, длина) и даёт методы сделать чище. Хороший признак зрелого junior — не сохранять в обход формы напрямую из request.POST.
from django import forms
class HabitForm(forms.Form):
name = forms.CharField(max_length=120)
minutes = forms.IntegerField(min_value=1, max_value=600)
def clean_name(self):
name = self.cleaned_data["name"].strip()
if len(name) < 2:
raise forms.ValidationError("Слишком короткое имя")
return name
После вечера с формами захотелось переписать все «ручные» приёмы — они были школой, а не привычкой. Валидация перестала быть пустым словом, когда увидел её как барьер ДО сохранения, а не «потом где-нибудь проверим».