Flask 在表单输入字段之外提交数据

Flask submit data outside of form input fields

我正在使用 Flask,我正在尝试提交一些不在输入字段中的数据,以将其添加到数据库中。

jinja 代码的形式如下所示:

{% for item in items %}
    <tr>
        <form id="adauga_{{ item.stoc_id }}" action="{{ url_for('adauga') }}" method="POST">
            <td>{{ item.stoc_id }}</td>
            <td>{{ item.denumire_produs }}</td>
            <td>{{ item.producator }}</td>
            <td>{{ item.data_expirarii }}</td>
            <td>{{ item.cant_fl }}</td>
            <td>{{ item.fractie }}</td>
            <td>{{ '%0.2f' | format(item.pret_fl | float) }}</td>
            <td><input type="number" max="{{ item.cant_fl }}" class="form-control" name="unitati"></td>
            <td><input type="number" max="{{ item.fractie }}" class="form-control" name="fractii"></td>
            <td><button type="submit" class="btn btn-primary" form="adauga_{{ item.stoc_id }}"><i class="fa fa-plus"></i> ADAUGA</button></td>
        </form>
    </tr>
{% endfor %}

在我的应用程序代码中有这个

@richter.route("/adauga", methods=["POST"])
def adauga():
    denumire_produs = (how do I get this?)
    producator = (how do I get this?)
    unitati = request.form["unitati"]
    fractii = request.form["fractii"]
    g.db.execute("INSERT INTO stocuri_disponibile (denumire_produs, producator, cant_fl, fractie) VALUES(?, ?, ?, ?)", [denumire_produs, producator, unitati, fractii])
    return redirect(request.referrer)

如何从表单中获取 denumire_produsproducator 变量?

我明白了。我认为。不确定这是否是正确的方法,但它对我有用。

jinja 代码

{% for item in items %}
    <tr>
        <form id="adauga_{{ item.stoc_id }}" action="{{ url_for('adauga', denumire_med=item.denumire_med, producator=item.producator) }}" method="POST">
            <td>{{ item.stoc_id }}</td>
            <td>{{ item.denumire_med }}</td>
            <td>{{ item.producator }}</td>
            <td>{{ item.data_expirarii }}</td>
            <td>{{ item.cant_fl }}</td>
            <td>{{ item.fractie }}</td>
            <td>{{ '%0.2f' | format(item.pret_fl | float) }}</td>
            <td><input type="number" max="{{ item.cant_fl }}" class="form-control" name="unitati"></td>
            <td><input type="number" max="{{ item.fractie }}" class="form-control" name="fractii"></td>
            <td><button type="submit" class="btn btn-primary" form="adauga_{{ item.stoc_id }}"><i class="fa fa-plus"></i> ADAUGA</button></td>
        </form>
    </tr>
{% endfor %}

申请代码:

@richter.route("/adauga/<denumire_med>,<producator>", methods=["POST"])
def adauga(denumire_med, producator):
    unitati = request.form["unitati"]
    fractii = request.form["fractii"]
    g.db.execute("INSERT INTO stocuri_disponibile (denumire_med, producator, cant_fl, fractie) VALUES(?, ?, ?, ?)", [denumire_med, producator, unitati, fractii])
    return redirect(request.referrer)

如果有更好的方法,请分享。我有...总共要传递 15 个参数,所以我很好奇是否有更短的方法。

干杯。

您可以在模板中使用 HTML 标签来实现此目的

<td><input type="hidden" name="denumire_produs" value="{{ item.denumire_produs }}">{{ item.denumire_produs }}</td>
<td>><input type="hidden" name="producator" value="{{ item.producator }}">{{ item.producator }}</td>

然后通过路由处理函数中的表单检索它

def adauga():
    denumire_produs = request.form["denumire_produs"]
    producator = request.form["producator"]
    ...