如何将我从同一个html表单收到的每个输入保存到列表中



如何将从同一表单收到的每个输入保存到列表中?希望如何在列表中保存用户输入的每个权重。是否可以保存用户插入的所有权重?如果他重新加载页面?

这是形式:

<form action="/send" method="POST">
<label for="">Weight</label>
<input type="text" name="weight">
<label for="">Height</label>
<input type="text" name="height">
<input type="submit" value="submit">
<br>
<div class="alert">
{{ BMI }}
</div>

这是烧瓶应用程序:


from flask import Flask, render_template, url_for, request
import schedule

app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def index():
return render_template('index.html')
@app.route('/send', methods=['GET', 'POST'])
def send():
if request.method=='POST':
weight = request.form['weight']
height = request.form['height']
a = float(weight)
b = float(height)
BMI = a/(b**2)
weights = []
weights.append(weight)
return render_template('index.html', BMI=BMI, weights = weights)

您需要一些东西来在请求之间保持这些数据。如果你只需要它很短的一段时间,你可以使用sessionFlask-Session的文档显示它现在是从flask.ext.session导入的,但我的版本是以from flask_session import Session导入的。

下面是一个最小但完整的玩具示例,展示了它是如何工作的(在这种情况下,我只存储BMI,但您可以在会话dict中存储多个列表(。请注意,如果使用Flask附带的默认会话,其存储容量非常小;这就是我将会话数据持久化到文件中的原因。

如果您需要数据保持更长时间(即永久性(,那么您需要使用数据库。需要注意的是:两次人们都主张将这些数据存储在全局变量中。这对网络应用程序来说是可怕的,因为多个用户会开始践踏彼此的数据,更不用说多个进程会开始不同步。

from flask import Flask, render_template_string, request, session
from flask_session import Session
app = Flask(__name__)
app.config['SECRET_KEY'] = b'_5#y2L"F4Q8znxec]/'
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()

最新更新