@app.route("/")
@app.route("/home",methods=['GET', 'POST'])
def home():
if current_user.is_authenticated:
posts=mongo.db.articles
#allpost=posts.find().limit(5)
it=current_user.user_json['interest']
allpost=posts.find( {'NewsType': it } ).limit(10)
#flash(session['email'])
return render_template('home.html', posts=allpost)
return render_template('login.html', title='Login',form=LoginForm())
Это мой код для домашней страницы
@app.route("/login", methods=['GET', 'POST'])
def login():
if current_user.is_authenticated:
return redirect(url_for('home'))
form = LoginForm()
if form.validate_on_submit():
users = mongo.db.users
loginuser_json = users.find_one({'email': form.email.data})
if loginuser_json and bcrypt.check_password_hash(loginuser_json['password'], form.password.data):
# Create a custom user and pass it to login_user:
loginuser = User(loginuser_json)
login_user(loginuser,duration=d)
next_page = request.args.get('next')
return redirect(next_page) if next_page else redirect(url_for('home'))
return redirect(url_for('home'))
else:
flash('Login Unsuccessful. Please check username and password', 'danger')
return render_template('login.html', title='Login', form=form)
и это для маршрута входа
Когда я пишу localhost: 5000 в браузере, он открывает страницу входа (потому что, если пользователь не аутентифицирован, он должен сначала перейти на страницу входа)
Но когда я пытаюсь войти в систему с этой страницы, появляется ошибка «Метод не разрешен. Метод не разрешен для запрошенного URL».
Что я должен делать

В вашем коде неясно, какой код вызывается, когда используется метод 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
Обратите внимание на отступ и соответствующий код, работающий под ним.
ПРИМЕЧАНИЕ в вашем шаблоне входа, убедитесь, что метод формы публикует что-то вроде этого
<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():
Надеюсь, это поможет вам разобраться с ошибкой
Большое спасибо за рекомендации и помощь
@adnan, добро пожаловать, если ответ решает проблему, и вы не забываете принять его, в противном случае сообщите нам, если вам потребуется дополнительная помощь
Да, ответ решит мою проблему. Я принял его, но там написано, что ваш ответ записан, но не отображается, потому что у меня меньше 15 очков репутации.
@adnan Accepting - это щелчок по серой галочке между голосами за и против. Только голоса за и против требуют большей репутации. (И вы получаете репутацию 2, когда принимаете ответ)
Также я бы рекомендовал заменить return render_template ('login.html' ....) в домашней функции на другое перенаправление возврата для входа в систему. По крайней мере, я думаю, что это должно произойти там.