如何在Python中对表单中的值求和
我想在Python Flask中对表单中的值求和。我该怎么做如何在Python中对表单中的值求和,python,flask,Python,Flask,我想在Python Flask中对表单中的值求和。我该怎么做 <form action="/count_daily_calories" method="post"> <p>Input 1: <input type="text" name="daily_calories" value="input"></p> <p>Input 2: <input type="text" name="daily_calorie
<form action="/count_daily_calories" method="post">
<p>Input 1: <input type="text" name="daily_calories" value="input"></p>
<p>Input 2: <input type="text" name="daily_calories" value="input"></p>
<input type="submit" value="Calculate">
<p>Result: <input type="text" name="result_dc" value="result"></p>
</form>
在这里,我不断得到所有的错误:
@app.route('/count_daily_calories', methods=['POST'])
def count_daily_calories():
if 'user_id' not in session:
return redirect('/')
float(request.form['result']) += float(request.form['input'])
return redirect('/daily_intake')
我不断收到无法分配给函数调用的错误将更容易在一个函数中完成所有操作。使用
redirect
您必须在cookie中保留值,以便在重定向后从cookie中获取值并将其放入表单中
我使用request.form
从浏览器中获取值,将其转换为float(),然后我求和值。当我得到结果后,我再次用值呈现页面——我在HTML中使用{{result}}
将值放置在正确的位置
在示例中,我使用render\u template\u string
而不是render\u template
只是为了使复制和运行更简单-所有内容都将放在一个文件中
from flask import Flask, request, render_template_string
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
vals = request.form.getlist('daily_calories')
val1 = float(vals[0])
val2 = float(vals[1])
result = val1 + val2
else:
val1 = ''
val2 = ''
result = ''
return render_template_string('''
<form action="/" method="POST">
<p>Input 1: <input type="number" name="daily_calories" value="{{ val1 }}"></p>
<p>Input 2: <input type="number" name="daily_calories" value="{{ val2 }}"></p>
<input type="submit" value="Calculate">
<p>Result: <input type="number" name="result_dc" value="{{ result }}"></p>
</form>
''', val1=val1, val2=val2, result=result)
app.run()
编辑: 本例使用纯
JavaScript
将AJAX
发送到发送结果的url/calculate
from flask import Flask, request, render_template_string
app = Flask(__name__)
@app.route('/')
def index():
return render_template_string('''
<form action="/" method="POST">
<p>Input 1: <input type="number" name="daily_calories" value="" id="val1"></p>
<p>Input 2: <input type="number" name="daily_calories" value="" id="val2"></p>
<input type="submit" value="Calculate" id="button_calculate">
<p>Result: <input type="number" name="result_dc" value="" id="result"></p>
</form>
<script>
var val1_input = document.getElementById("val1");
var val2_input = document.getElementById("val2");
var result_input = document.getElementById("result");
var button_input = document.getElementById("button_calculate");
button_input.onclick = function(event) {
var formData = new FormData();
formData.append('val1', val1_input.value)
formData.append('val2', val2_input.value)
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
if(request.readyState == 4 && request.status == 200)
{
//alert(request.responseText);
result_input.value = request.responseText;
}
}
request.open('POST', "/calculate");
// execute the request
request.send(formData);
return false; // don't send button to server
}
</script>
''')
@app.route('/calculate', methods=['POST'])
def calcualte():
val1 = float(request.form.get('val1'))
val2 = float(request.form.get('val2'))
return str(val1+val2)
if __name__ == '__main__':
app.run()
从烧瓶导入烧瓶,请求,呈现\u模板\u字符串
app=烧瓶(名称)
@应用程序路径(“/”)
def index():
返回渲染模板字符串(“”)
投入1:
投入2:
结果:
var val1_input=document.getElementById(“val1”);
var val2_input=document.getElementById(“val2”);
var result_input=document.getElementById(“结果”);
var按钮输入=document.getElementById(“按钮计算”);
按钮\u input.onclick=功能(事件){
var formData=new formData();
formData.append('val1',val1_input.value)
formData.append('val2',val2_input.value)
var request=new XMLHttpRequest();
request.onreadystatechange=函数(){
if(request.readyState==4&&request.status==200)
{
//警报(request.responseText);
结果_input.value=request.responseText;
}
}
请求打开('POST',“/计算”);
//执行请求
请求。发送(formData);
返回false;//不将按钮发送到服务器
}
''')
@app.route('/calculate',methods=['POST'])
def calcualte():
val1=float(request.form.get('val1'))
val2=float(request.form.get('val2'))
返回str(val1+val2)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
app.run()
从请求中获取字符串。表单
,将字符串转换为数字并求和。我的第一个想法是转换,但我的方法不起作用。我如何做到这一点/首先从request.form
获取值。如果您得到错误,然后显示问题中的完整错误消息-我们无法在您的脑海中阅读。顺便说一句:如果您希望在不重新加载页面的情况下进行计算,那么您需要JavaScript/AJAX来发送数据和接收结果。我更新了它。它说不能分配给函数callI-added示例,该示例只使用JavaScript来计算它-它不必将它发送到flask。最终的JavaScript可以使用AJAX发送数据并只接收结果,并将此结果以HTML格式放到浏览器中。非常感谢!你帮了大忙!
from flask import Flask, request, render_template_string
app = Flask(__name__)
@app.route('/')
def index():
return render_template_string('''
<form action="/" method="post">
<p>Input 1: <input type="number" name="daily_calories" value="" id="val1"></p>
<p>Input 2: <input type="number" name="daily_calories" value="" id="val2"></p>
<input type="submit" value="Calculate" id="button_calculate">
<p>Result: <input type="number" name="result_dc" value="" id="result"></p>
</form>
<script>
var val1_input = document.getElementById("val1");
var val2_input = document.getElementById("val2");
var result_input = document.getElementById("result");
var button_input = document.getElementById("button_calculate");
button_input.onclick = function(event) {
result_input.value = parseFloat(val1_input.value) + parseFloat(val2_input.value);
//event.preventDefault(); // don't send to server
return false; // don't send to server
}
</script>
''')
if __name__ == '__main__':
app.run()
from flask import Flask, request, render_template_string
app = Flask(__name__)
@app.route('/')
def index():
return render_template_string('''
<form action="/" method="POST">
<p>Input 1: <input type="number" name="daily_calories" value="" id="val1"></p>
<p>Input 2: <input type="number" name="daily_calories" value="" id="val2"></p>
<input type="submit" value="Calculate" id="button_calculate">
<p>Result: <input type="number" name="result_dc" value="" id="result"></p>
</form>
<script>
var val1_input = document.getElementById("val1");
var val2_input = document.getElementById("val2");
var result_input = document.getElementById("result");
var button_input = document.getElementById("button_calculate");
button_input.onclick = function(event) {
var formData = new FormData();
formData.append('val1', val1_input.value)
formData.append('val2', val2_input.value)
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
if(request.readyState == 4 && request.status == 200)
{
//alert(request.responseText);
result_input.value = request.responseText;
}
}
request.open('POST', "/calculate");
// execute the request
request.send(formData);
return false; // don't send button to server
}
</script>
''')
@app.route('/calculate', methods=['POST'])
def calcualte():
val1 = float(request.form.get('val1'))
val2 = float(request.form.get('val2'))
return str(val1+val2)
if __name__ == '__main__':
app.run()