在单击按钮时未进行烧瓶重定向

时间:2019-07-04 05:45:54

标签: redirect flask

我总体上仍在尝试学习flask / redirects / etc。我试图用一个提交按钮创建一个简单的页面,当我提交时,重定向到显示json数据的页面。但是当我单击按钮时什么也没有发生。我可以在浏览器URL中访问端点。

这就是我的理解方式。请指出我误解的地方。

  1. 服务index.html

  2. 我有一个表单(“提交”按钮),该表单在POST中具有index.html方法。

  3. 当我单击“提交”按钮时,它应将我重定向到包含数据jsonify的页面。

我使用jsonify的原因是因为这是我尝试采取的较大步骤的一部分,在其中单击按钮,它查询数据库并返回resultproxy的json。我认为这与AJAX有关。我还是要弄清楚。

app.py

from flask import Flask, render_template, redirect, request, url_for, jsonify
from forms import Submit
import os
import json

app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(12)


@app.route('/', methods=['GET', 'POST'])
def home():
    form = Submit()
    if request.method == 'POST':
        return redirect(url_for('data'))
    return render_template('index.html')


@app.route('/data')
def data():
    data = {
        'author': 'rowling',
        'book': 'harry potter'
    }
    return jsonify(data)


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

forms.py

from flask_wtf import FlaskForm
from wtforms import validators, SubmitField


class Submit(FlaskForm):
    submit = SubmitField(label='submit')

index.html

<h1>Hello world</h1>

<br>
<br>

<form action="{{url_for ('data') }}" method="GET">
    <input type="button" value="Submit" action="{{url_for ('data') }}">
</form>

1 个答案:

答案 0 :(得分:1)

请查看您的模板,该表单已定义为使用GET方法而不是POST方法提交:

<form action="{{url_for ('data') }}" method="GET">

此外,操作URL设置为/data而不是/。 IMO,您需要将此行更改为此:

<form method="post">

此外,您还必须在type="submit"<input>元素中添加<button>才能提交表单:

<input type="submit">

由于您使用的是WTForms,因此只需使用{{ form.submit }}来呈现您的提交按钮。最终形式为:

<form method="post">
    {{ form.submit }}
</form>

只要尝试一下,让我知道它是否有效!

相关问题