Компилятор Python перемещается слева направо, что означает, что когда дело доходит до проверки нескольких условий с помощью только оператора and
, компилятор Python сначала проверяет первое условие, а если оно истинно, он переходит ко второму условию, ии так далее для последующих условий.
В результате, если вы измените данную строку на что-то вроде ниже, ваш код начнет работать так, как задумано:
if user is not None and user.check_password(form.password.data):