Передача информации с одного маршрута на другой: Flask игнорирует запросы на перенаправление - PullRequest
0 голосов
/ 30 января 2019

У меня проблемы с получением колбы для отправки информации по другому маршруту для отправки.В будущем это будет использоваться для действий, требующих входа на страницы, которые могут просматривать пользователи, вышедшие из системы.

Я использую python 3.6 и flask 1.0.2.Я попытался перенаправить с помощью validate_on_submit (), возиться с различными другими частями кода, и я пытался ссылаться на второй маршрут в HTML.

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)

В примере я пытаюсь распечатать данные формына стороне сервера на редирект.Предполагая, что это даже возможно.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div class="content-section">
    <form method="POST" action="">
        {{ form.hidden_tag() }}
        <fieldset class="form-group">
            <legend class="border-bottom mb-4">{{ legend }}</legend>
            <div class="form-group">
                {{ form.content.label(class="form-control-label") }}
                {% if form.content.errors %}
                    {{ form.content(class="form-control form-control-lg is-invalid") }}
                    <div class="invalid-feedback">
                        {% for error in form.content.errors %}
                            <span>{{ error }}</span>
                        {% endfor %}
                    </div>
                {% else %}
                    {{ form.content(class="form-control form-control-lg") }}
                {% endif %}
            </div>
        </fieldset>
        <div class="form-group">
            <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") }}
        </div>
    </form>
</div>
</body>
</html>

Оба метода обновляют страницу, ничего не делая.Проблема в том, что при перенаправлении ничего нигде не печатается.

на этом рисунке вы можете увидеть вывод (url_for ('submit', content = content)) . Я хочу сделать аналогичную вещьс print (content) , но код никогда не делает это там. фото выхода

1 Ответ

0 голосов
/ 30 января 2019

Вы не возвращаете никакого ответа на представление.

return redirect(url_for())

И вы должны передать имя функции декоратора маршрута в url_for(), чтобы создать URL, а не имя шаблона.

Например:

@app.route('/')
def index():
    return render_template('index.html')


# redirect `/somewhere/` to `/`
@app.route('/somewhere/')
     return redirect(url_for('index')

Для печати содержимого на консоль разработки колб.

import sys
print('This will be printed to the console', file=sys.stdout)

В вашем случае вы можете передавать данные, как показано ниже:

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