В вашем коде неясно, какой код вызывается, когда метод GET (обычно при отображении страницы входа в систему), и какой должен вызываться, когда метод POST (вызывается при отправке формы).Чтобы удалить путаницу, сделайте это в своем логине
@app.route("/login", methods=['GET', 'POST'])
def login():
# code that runs for both GET and POST goes here
if request.method == 'POST':
if form.validate_on_submit():
#authenticate user and redirect to next page/home page
return render_template('login.html', title='Login', form=form) #this runs when method is get
Обратите внимание на отступ и соответствующий код под ним
NOTE в вашем шаблоне логина, убедитесь, чтометод form отправляет что-то вроде этого
<form method=post>
<dl>
{{ render_field(form.email) }}
{{ render_field(form.password) }}
{{form.hidden_tag()}}
</dl>
<input type=submit value=Submit>
</form>
Наконец, на домашней странице у вас есть два маршрута, формирующих url_for (home) - хотя я не думаю, что именно отсюда ваша ошибка - убедитесь, чтооба они принимают метод POST, если вы собираетесь использовать его там
@app.route("/",methods=['GET', 'POST'])#add post on this route
@app.route("/home",methods=['GET', 'POST'])
def home():
Надеюсь, это поможет вам разобраться с ошибкой