1. ホーム
  2. python

[解決済み】Flaskのエラー。"メソッドが許可されていません 要求されたURLに対してメソッドが許可されていません"

2022-02-05 20:34:13

質問内容

Flaskのフォームにデータを送信しようとすると、以下のエラーが発生します。

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}}

解決方法は?

ここで起こっているのは、データベースルートがどんなURLメソッドも受け入れないということです。

私は、あなたがentry_page関数にあるように、アプリルートにurlメソッドを入れてみる。

@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)