关于python:将信息从一个路径传递到另一个路径:Flask忽略重定向请求

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

并且您必须将路径装饰器的函数名称传递给url_for()以生成url,而不是模板名称。

例如:

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)