Ошибка колбы: «Метод не разрешен Метод не разрешен для запрошенного URL» (Вход и домашняя страница) - PullRequest
0 голосов
/ 31 декабря 2018
@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».

Что мне делать

1 Ответ

0 голосов
/ 31 декабря 2018

В вашем коде неясно, какой код вызывается, когда метод 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():

Надеюсь, это поможет вам разобраться с ошибкой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...