我总体上仍在尝试学习flask / redirects / etc。我试图用一个提交按钮创建一个简单的页面,当我提交时,重定向到显示json数据的页面。但是当我单击按钮时什么也没有发生。我可以在浏览器URL中访问端点。
这就是我的理解方式。请指出我误解的地方。
服务index.html
。
我有一个表单(“提交”按钮),该表单在POST
中具有index.html
方法。
当我单击“提交”按钮时,它应将我重定向到包含数据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>
答案 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>
只要尝试一下,让我知道它是否有效!