Является ли антипаттерном использование `request.POST или None` для инициализации формы Django?
Я наткнулся на запись в блоге, в которой утверждается, что следующее является антипаттерном:
def some_view(request):
form = MyForm(request.POST or None)
# …
Источник: https://www.django-antipatterns.com/antipattern/using-request-post-or-none.html
Однако я не совсем понимаю, какие проблемы может вызвать его использование. Я использовал это для сохранения лаконичности моих представлений, не замечая никакого неожиданного поведения.
Является ли это антипаттерном? Если да, то почему?
На сайте объясняется, почему это проблематично:
Это означает, что даже если это POST запрос, он примет значение None, и поэтому в результате форма не будет ограничена.
В этом можно убедиться, если порыться в исходниках. Первым аргументом инициализатора формы является data
, а инициализатор содержит эту строку:
self.is_bound = data is not None or files is not None
Как уже упоминалось, если data
является None
, форма не будет считаться связанной. Это приводит к тому, что форма никогда не будет считаться действительной:
def is_valid(self):
"""Return True if the form has no errors, or False otherwise."""
return self.is_bound and not self.errors
Это было бы проблематично, если вы делаете надлежащую валидацию на форме после.