Установите переменную python в колбу с помощью кнопки и JavaScript - PullRequest
0 голосов
/ 30 октября 2019

У меня есть простое приложение Flask, которое содержит одну переменную с именем variable:

from flask import Flask, render_template

app = Flask(__name__)

variable = 100

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

def main():
    app.run(debug=True, port=5000)

if __name__ == '__main__':
    main()

Файл index.html выглядит следующим образом:

variable = {{ variable }}

<button onclick="setVariable(101);">
  set variable to 101
</button>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

<script>
  function setVariable(variable) {
    console.log(`variable = ${variable}`);
  }
</script>

Есть ли способ установить значение переменной в функции setVariable? , т. Е. Так, чтобы в этом примере значение variable было установлено равным 101.

По сути, конечной целью является динамическоеустановите значение variable с помощью кнопки, которая должна также обновить строку variable = {{ variable }} в файле index.html.

EDIT

Следующее подразумевает, что выне может этого сделать и должен использовать ajax-запрос или что-то подобное.

https://stackoverflow.com/a/43383967/5058116

Ответы [ 2 ]

1 голос
/ 30 октября 2019

Вы можете использовать Post / Redirect / Get .

Используйте форму в index.html, чтобы отправить значение в @app.route('/index/', methods=['GET', 'POST']) в app.py

Форма в index.html

variable = {{ variable }}


<form action="{{ url_for('index') }}" method="post">
    <input type="text" value="101" name="variable">
    <input type="submit" value="set variable to 101">
</form>


{% with messages = get_flashed_messages() %}
{% if messages %}
<ul>
    {% for message in messages %}
    <li style="color:red">{{ message }}</li>
    {% endfor %}
</ul>
{% endif %}
{% endwith %}

изменить app.py для обработкиформа

from flask import Flask, render_template, request, redirect, url_for, flash

app = Flask(__name__)
app.secret_key = b'_1#y2l"F4Q8z\n\xec]/'

variable = 100


@app.route('/', methods=['GET', 'POST'])
@app.route('/index/', methods=['GET', 'POST'])
def index():
    global variable
    if request.method == "POST":
        try:
            variable = int(request.form.get("variable"))
            return redirect(url_for('index'))
        except:
            flash("Invalid type for variable")
        return redirect(url_for('index'))
    return render_template('index.html', variable=variable)


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

Добавление app.secret_key = b'_1#y2l"F4Q8z\n\xec]/' к flash сообщению об ошибке, если пользователь пытается отправить что-либо кроме цифр

0 голосов
/ 30 октября 2019

Я думаю, вы должны рассмотреть возможность использования React или Vue. Или используйте базу данных (MySQL или MongoDB и т. Д.) Для хранения постоянных данных и динамического чтения данных с помощью ajax.

И другое решение, использующее веб-сокет, например meteor или nodejs, можетбудь милым.

...