Ошибка фляги: "Метод не разрешен. Метод не разрешен для запрошенного URL".

Я получаю следующую ошибку, когда я пытаюсь отправить данные в форму "Ключ":

Method Not Allowed The method is not allowed for the requested URL.

Я думаю, что проблема в return redirect(url_for('database')) я делаю. Я также пробовал return render_template('database.html) тоже. Я пытаюсь вызвать страницу базы данных после того, как записи формы были отправлены в базу данных.

Соответствующие части моего кода выглядят следующим образом:

@app.route('/entry', methods=['GET', 'POST'])
def entry_page():
    if request.method == 'POST':
        date = request.form['date']
        title = request.form['blog_title']
        post = request.form['blog_main']
        post_entry = models.BlogPost(date = date, title = title, post = post)
        db.session.add(post_entry)
        db.session.commit()
        return redirect(url_for('database'))
    else:
        return render_template('entry.html')

@app.route('/database')        
def database():
    query = []
    for i in session.query(models.BlogPost):
        query.append((i.title, i.post, i.date))
    return render_template('database.html', query = query)

entry.html...

THIS IS THE BLOG ENTRY PAGE

blog:
<html>
    <form action='/database' method = "post">
        date<input name = "date" type = "text" class="text">
        title<input name = "blog_title" type = "text" class="text">
        main<input name = "blog_main" type = "text" class="text">
        <input type = "submit">
    </form> 
</html>

и database.html...

THIS IS THE QUERY:

{{query}}

Ответы

Ответ 1

Что здесь происходит, так это то, что маршрут базы данных не принимает никаких URL-адресов.

Я попытался бы поместить методы url в маршрут приложения так же, как и в функции entry_page:

@app.route('/entry', methods=['GET', 'POST'])
def entry_page():
    if request.method == 'POST':
        date = request.form['date']
        title = request.form['blog_title']
        post = request.form['blog_main']
        post_entry = models.BlogPost(date = date, title = title, post = post)
        db.session.add(post_entry)
        db.session.commit()
        return redirect(url_for('database'))
    else:
        return render_template('entry.html')

@app.route('/database', methods=['GET', 'POST'])        
def database():
    query = []
    for i in session.query(models.BlogPost):
        query.append((i.title, i.post, i.date))
    return render_template('database.html', query = query)

Ответ 2

У меня была аналогичная проблема, когда я развернул приложение Flask в IIS. По-видимому, IIS не принимает маршрут, который включает подчеркивание ( "_" ). Когда я удалил подчеркивание, проблема была решена.

Ответ 3

У меня также была похожая проблема, когда перенаправления давали 404 или 405 случайным образом на моем сервере разработки. Это была проблема со случаями с оружейным оружием.

Оказывается, я не правильно закрыл экземпляр gunicorn перед тем, как запустить новый для тестирования. Каким-то образом оба процесса работали одновременно, прослушивая один и тот же порт 8080 и мешая друг другу. Как ни странно, они продолжали бежать в фоновом режиме после того, как я убил все свои терминалы. Пришлось убивать их вручную с помощью fuser -k 8080/tcp

Ответ 4

Эта ошибка может возникать иногда, если вы запускаете свое веб-приложение без сохранения файла Python.