Вам нужно что-то, чтобы сохранить эти данные между запросами. Если вам это нужно только в течение короткого периода времени, вы можете просто использовать session
. Документы для Flask-Session
, кажется, показывают, что он импортируется из flask.ext.session
сейчас, но моя версия импортируется как from flask_session import Session
.
Ниже приведен минимальный, но полный пример игрушки, который можно показать как это работает (в этом случае я просто храню BMI, но вы можете хранить несколько списков в сеансе dict). Обратите внимание, что если вы используете сеанс по умолчанию, который идет с Flask, его емкость хранения очень мала; Вот почему я сохраняю данные сеанса в файл.
Если вам нужно, чтобы данные сохранялись дольше (то есть постоянно), вам необходимо использовать базу данных. Обратите внимание: дважды люди выступали за сохранение этих данных в глобальной переменной. Это ужасно для веб-приложения, потому что несколько пользователей начнут топтать данные друг друга, не говоря уже о том, что несколько процессов начнут выходить из строя c.
from flask import Flask, render_template_string, request, session
from flask_session import Session
app = Flask(__name__)
app.config['SECRET_KEY'] = b'_5#y2L"F4Q8z\n\xec]/'
app.config['SESSION_TYPE'] = 'filesystem'
sess = Session()
sess.init_app(app)
homepage_template = """
<form method="POST" action="{{ url_for('bmi_submission') }}" id="bmi_form">
Weight: <input type="text" name="weight" value=""><br>
Height: <input type="text" name="height" value=""><br>
<input type="submit" value="Submit">
</form>
<div id="result_div"></div>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script>
$("#bmi_form").submit(function(e) {
e.preventDefault();
var form = $(this);
var url = form.attr('action');
$.ajax({
type: "POST",
url: url,
data: form.serialize(),
context: form,
success: function(resp) {
$("#result_div").html(resp);
}
});
});
</script>
"""
@app.route('/', methods=['GET'])
def homepage():
return render_template_string(homepage_template)
@app.route('/calc_bmi', methods=['POST'])
def bmi_submission():
weight = request.form.get('weight')
height = request.form.get('height')
a = float(weight)
b = float(height)
BMI = a/(b**2)
if session.get('bmi'):
session['bmi'].append(BMI)
else:
session['bmi'] = [BMI]
return '<br>'.join([str(item) for item in session['bmi']])
if __name__ == '__main__':
app.run()