2013-12-19 44 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方法。

我会尝试把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) 
+0

谢谢,这样做的工作。虽然由于某种原因,它不再向数据库提交。 –

+1

这是因为您的数据库提交功能在您的entry_page函数中,而您的表单文章正在重定向到数据库函数。 您可能希望将该逻辑移出entry_page函数并将其放入数据库函数 – Wondercricket

+0

再次感谢,该工作正常!我不确定我完全理解为什么。我要求它在重定向发生之前将数据提交到数据库,并且当我重定向到'/ database'以外的页面时,这会起作用。无论如何,感谢您的帮助。 –

1

我也有类似的问题,当我部署了我瓶的应用程序在IIS。显然,IIS不接受包含下划线(“_”)的路由。当我删除下划线时,问题解决了。