Flask, передача введенных пользователем данных между представлениями - PullRequest
1 голос
/ 30 января 2020

Проблема с переносом переменных между представлениями Я пытался использовать сеансы и не смог подключиться к работе. Скажем, у меня есть две страницы, home и page2. У меня есть приложение flask, которое будет принимать пользовательский ввод с home и распечатывать ввод на page2.


Например, если вы запустите мое приложение, вы увидите его в качестве домашней страницы :

Home Page

  • Эта часть работает нормально, я могу ввести значение.

После того, как вы нажмете кнопку "Отправить", я хочу, чтобы после этого было сгенерировано page2, показывающее, что только что было введено :

page2

  • Какое бы значение строки не было введено в home, оно должно отображаться в выделенной части.

У меня есть следующий файл app.py:

from flask import Flask, render_template, request, session

app = Flask(__name__)


@app.route('/', methods=['GET', 'POST'])
def home():

    stringval = ''
    if request.method == 'POST' and 'stringval' in request.form:
        stringval = request.form.get('stringval')
        session["stringvalue_topass"] = stringval
        return render_template('page2.html', stringval = stringval)

    return render_template("home.html")


@app.route('/page2', methods=['GET', 'POST'])
def page2():
    stringvalue_get = session.get('stringvalue_topass')
    return render_template('page2.html', stringvalue_get = stringvalue_get)




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

Следующий дом. html:

<!doctype html>

<h1>Enter Value </h1>
<div class="main">
    <form class="pure-form" method="POST" action="/page2">
    stringval:<br>
    <input type="text" name="stringval"><br>
    <button type="submit" class="pure-button pure-button-primary" value="Submit">Submit!</button>
    </form>
</div>

</body>

И следующий стр. 2 html

<code><!doctype html>

<h1>You have selected </h1>

<div class="main">
    {% if stringvalue_get %}
        <pre>

    {% print(stringvalue_get) %}
    
{% endif%}

1 Ответ

1 голос
/ 31 января 2020

Хорошо, здесь есть несколько вопросов. Во-первых, атрибут action вашей формы в home.html имеет значение "/page2". Это означает, что при отправке формы запрос POST направляется к конечной точке /page2, а не к конечной точке /home, где вы написали код для обработки отправки формы. Мы можем исправить это, просто удалив атрибут action, так как это означает, что форма будет отправлять на конечную точку, которая ее загрузила - в этом случае /home.

Во-вторых, сеансы Flask нельзя использовать без установка секретного ключа для шифрования сеанса. Это можно сделать, присвоив значение app.secret_key, например, так:

app = Flask(__name__)
app.secret_key = b"my_secret_key"

Наконец, вместо передачи строки в шаблон, например, так: render_template('page2.html', stringval = stringval), (обратите внимание также, что это должно быть stringval_get = stringval), вы можете получить доступ к объекту session непосредственно из шаблонов. Таким образом, в целом мы можем изменить код вашего приложения на:

app.py:

from flask import Flask, render_template, request, session

app = Flask(__name__)
app.secret_key = b"my_secret_key"

@app.route('/', methods=['GET', 'POST'])
def home():
    if request.method == 'POST' and 'stringval' in request.form:
        session["stringvalue_topass"] = request.form.get('stringval')
        return render_template('page2.html')
    return render_template("home.html")


@app.route('/page2', methods=['GET', 'POST'])
def page2():
    return render_template('page2.html')

А ваши шаблоны на:

home. html:

<!doctype html>

<h1>Enter Value </h1>
<div class="main">
    <form class="pure-form" method="POST">
    stringval:<br>
    <input type="text" name="stringval"><br>
    <button type="submit" class="pure-button pure-button-primary" value="Submit">Submit!</button>
    </form>
</div>

</body>

page2. html:

<code><!doctype html>

<h1>You have selected </h1>

<div class="main">
  {% if 'stringvalue_topass' in session %}
  <pre>

    {% print(session["stringvalue_topass"])  %}
  
{% endif%}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...