Unless I'm reading the template wrong (which is quite possible!), I think that you have an extra 'novalidate' attribute in the form tag that starts on line 48 of the bootstrap_wtf.html template - given that you add one (conditionally) later on (on line 52).
(Thanks for creating the 'mega tutorial' - and all your Flask work, I've really enjoyed playing with it)
Unless I'm reading the template wrong (which is quite possible!), I think that you have an extra 'novalidate' attribute in the form tag that starts on line 48 of the bootstrap_wtf.html template - given that you add one (conditionally) later on (on line 52).
(Thanks for creating the 'mega tutorial' - and all your Flask work, I've really enjoyed playing with it)