提交表单时烧瓶返回“方法不允许”

时间:2019-12-07 11:34:56

标签: python flask flask-wtforms

我正在密切关注very brief tutorial from Flask-wtf here。我遇到一个问题,当我在 submit 页面表单中提交我的姓名后,它会显示“ 405 Method Not Allowed ”(不允许使用“ 405方法” )消息,而不是将我引导到成功页面。

from flask import Flask, render_template, redirect
from forms import MyForm

app = Flask(__name__)
app.secret_key = 'mysecretKey'


@app.route('/submit', methods=('GET', 'POST'))
def submit():
    form = MyForm()
    if form.validate_on_submit():
        return redirect('/success')
    return render_template('submit.html', form=form)


@app.route('/success')
def success():
    return "Well done for entering your name!"


if __name__ == '__main__':
    app.run(debug=True)

我的表格在这里:

from flask_wtf import FlaskForm
from wtforms import StringField
from wtforms.validators import DataRequired


class MyForm(FlaskForm):
    name = StringField('name', validators=[DataRequired()])

我的Submit.html代码如下所示(就像本教程中一样):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Password page</title>
</head>
<body>

<form method="POST" action="/">
    {{ form.hidden_tag() }}
    {{ form.name.label }} {{ form.name(size=20) }}
    <input type="submit" value="Go">
</form>

</body>
</html>

编辑:if form.validate_on_submit()条件不会返回True,因此不会执行循环的内容。我在其中添加了一个未执行的简单打印语句。

2 个答案:

答案 0 :(得分:2)

如果我假装确切地知道如何解决所有相对路径,那我会撒谎。但是,您可以通过以下方法解决此问题:

<form method="POST" action="/">

收件人:

<form method="POST" action="{{ url_for('submit') }}">

将问题传递给图书馆以弄清楚,这确实是有意义的事情之一。渲染模板时,请使用url_for在Jinja2中也可以使用。

答案 1 :(得分:0)

问题是您没有提到方法success应该处理POST请求。

from flask import Flask, render_template, redirect
from forms import MyForm

app = Flask(__name__)
app.secret_key = 'mysecretKey'


@app.route('/submit', methods=('GET', 'POST'))
def submit():
    form = MyForm()
    if form.validate_on_submit():
        return redirect('/success')
    return render_template('submit.html', form=form)


@app.route('/success')
def success():
    return "Well done for entering your name!"


if __name__ == '__main__':
    app.run(debug=True)

使用

from flask import Flask, render_template, redirect
from forms import MyForm

app = Flask(__name__)
app.secret_key = 'mysecretKey'


@app.route('/submit', methods=['GET', 'POST'])
def submit():
    form = MyForm()
    if form.validate_on_submit():
        return redirect('/success')
    return render_template('submit.html', form=form)

# This is the change I made.
@app.route('/success', methods=['POST'])
def success():
    return "Well done for entering your name!"


if __name__ == '__main__':
    app.run(debug=True)
相关问题