2013-12-19 35 views
15

私は私のフラスコフォームにデータを送信しようとするたびに、私は次のエラーを取得しています:フラスコエラー:「メソッド許可されない方法が要求された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}} 

答えて

23

は何ですかここで起こるのは、データベースルートが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) 
+0

ありがとう、それは仕事をしました。何らかの理由でそれ以上データベースにコミットしていませんが。 –

+1

これは、データベースのサブミット機能がentry_page関数内にあるのに対し、postという形式はデータベース関数にリダイレクトされているためです。 entry_page関数からそのロジックを移動し、それをデータベース関数 – Wondercricket

+0

に入れたいと思うかもしれません。私はなぜ私が完全に理解するか分からない。リダイレクトが発生する前にデータベースにデータをコミットするように依頼していますが、これは '/ database'以外のページにリダイレクトしているときに機能します。とにかく、あなたの助けに感謝します。 –

1

私はIISで私のフラスコアプリを展開したとき、私は同様の問題がありました。明らかに、IISはアンダーライン( "_")を含むルートを受け入れません。下線を外すと、問題は解決しました。

関連する問題