如何在Python中对表单中的值求和

如何在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

我想在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_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()