python Flask错误:“方法不允许该方法不允许用于请求的URL”

pgky5nke  于 12个月前  发布在  Python
关注(0)|答案(9)|浏览(197)

每当我尝试向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 is.

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

hgqdbh6s

hgqdbh6s1#

这里发生的事情是数据库路由不接受任何URL方法。
我会尝试将url方法放在app route中,就像你在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)

字符串

az31mfrm

az31mfrm2#

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

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

字符串

f3temu5u

f3temu5u3#

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

fhg3lkii

fhg3lkii4#

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

return redirect(url_for('index'))

字符串

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


在我的POSTDELETE路由中。

czq61nw1

czq61nw15#

flask需要有enctype="”必须在表单标签中添加。如下所示。

<html>
    <form action='/database' method = "post" enctype="multipart/form-data">
        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>

字符串

olqngx59

olqngx596#

我也遇到过类似的问题,在我的开发服务器上,重定向随机地给出404或405。这是gunicorn示例的问题。
原来我没有正确关闭gunicorn示例,然后启动一个新的示例进行测试。不知何故,两个进程同时运行,监听同一个端口8080并相互干扰。奇怪的是,在我杀死所有终端后,它们继续在后台运行。不得不使用fuser -k 8080/tcp手动杀死它们

omvjsjqw

omvjsjqw7#

尝试添加方法
@app.route('/database',methods=' GET ',' POST '])

wwtsj6pe

wwtsj6pe8#

可能与此错误并行:假设您的端点如下所示:

@app.route('/entry', methods=['GET', 'POST'])

字符串
现在,如果在你的html中action属性不匹配提到的端点,自然,你会得到一个错误:

<!-- N.B. its `entri`; but it should be `entry`-->
    <form action="entri" method="post" class="">


这是显而易见的,但可能是鬼鬼祟祟的。希望它能帮助到一些人。

e0uiprwp

e0uiprwp9#

我花了将近5个小时,对我来说,解决方案只是首先指定方法,然后是操作。

<form method = "post" action='/database'>

字符串

相关问题