每当我尝试将数据提交到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}}
答案 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())
在我的POST
和DELETE
路线中。