Flask Error:“不允许使用方法请求的URL不允许使用该方法”

时间:2013-12-19 18:37:12

标签: python flask

每当我尝试将数据提交到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}}

6 个答案:

答案 0 :(得分:31)

这里发生的是数据库路由不接受任何url方法。

我会尝试将url方法放在app路径中,就像在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)

答案 1 :(得分:3)

我想你忘记为你的数据库函数添加方法了。

@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 :(得分:2)

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

答案 3 :(得分:0)

我也有类似的问题,重定向在我的开发服务器上随机提供404或405。这是枪炮事件的一个问题。

事实证明,在开始新测试之前,我没有正确关闭gunicorn实例。 不知何故,两个进程同时运行,收听相同的端口8080并相互干扰。 奇怪的是,在我杀死了所有的终端后,他们继续在后台跑。 不得不使用fuser -k 8080/tcp

手动杀死它们

答案 4 :(得分:0)

如果您在不保存Python文件的情况下运行网络应用,有时可能会出现此错误。

答案 5 :(得分:0)

我遇到了同样的问题,我的解决方法是替换:

return redirect(url_for('index'))

return render_template('indexo.html',data=Todos.query.all())

在我的POSTDELETE路线中。