Passing information from one route to another: Flask ignoring redirect requests
我无法将烧瓶信息发送到要提交的其他路线。 将来,这将用于需要在登出用户可以查看的页面上登录的操作。
我正在使用python 3.6和flask 1.0.2。 我尝试使用validate_on_submit()重定向,搞乱代码的各个其他部分,我尝试链接到html中的第二个路由。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | from flask import Flask, render_template, url_for, redirect from flask_wtf import FlaskForm from wtforms import StringField, SubmitField app = Flask(__name__) app.config['SECRET_KEY'] = 'b317a06ad972917a84be4c6c14c64882' class PostForm(FlaskForm): content = StringField('Content') submit = SubmitField('form submit') @app.route("/", methods=['GET', 'POST']) @app.route("/home", methods=['GET', 'POST']) def home(): form = PostForm() if form.validate_on_submit(): content = form.content.data redirect(url_for('submit', content=content)) print(url_for('submit', content=content)) return render_template('example.html', form=form) @app.route("/submit/<string:content>", methods=['GET', 'POST']) def submit(content): print('content') print(content) return redirect(url_for('example')) if __name__ =="__main__": app.run(debug=True) |
在示例中,我尝试在重定向上在服务器端打印表单数据。 假设甚至可能。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> Title </head> <body> <form method="POST" action=""> {{ form.hidden_tag() }} <fieldset class="form-group"> <legend class="border-bottom mb-4">{{ legend }}</legend> {{ form.content.label(class="form-control-label") }} {% if form.content.errors %} {{ form.content(class="form-control form-control-lg is-invalid") }} {% for error in form.content.errors %} <span>{{ error }}</span> {% endfor %} {% else %} {{ form.content(class="form-control form-control-lg") }} {% endif %} </fieldset> <form action="{{ url_for('submit', content=content) }}" method="POST"> <input class="btn btn-danger" type="submit" value="html submit"> {{ form.submit(class="btn btn-outline-info") }} </form> </body> </html> |
两种方法都刷新页面而不做任何其他操作。 问题是在重定向时没有任何地方可以打印。
在这张图片中你可以看到print(url_for('submit',content = content))输出我想用print(内容)做类似的事情,但代码永远不会在那里。
输出照片
您没有向视图返回任何响应。
1 | return redirect(url_for()) |
并且您必须将路径装饰器的函数名称传递给
例如:
1 2 3 4 5 6 7 8 | @app.route('/') def index(): return render_template('index.html') # redirect `/somewhere/` to `/` @app.route('/somewhere/') return redirect(url_for('index') |
将内容打印到烧瓶开发控制台。
1 2 | import sys print('This will be printed to the console', file=sys.stdout) |
在您的情况下,您可以传递如下数据:
1 2 3 4 5 6 7 8 9 10 11 | import sys @app.route("/", methods=['GET', 'POST']) @app.route("/home", methods=['GET', 'POST']) def home(): form = PostForm() if form.validate_on_submit(): content = form.content.data print(content, file=sys.stdout) return redirect(url_for('submit', content=content)) return render_template('example.html', form=form) |