通过输入数据的POST请求进行烧瓶循环

时间:2019-01-30 17:34:07

标签: python html json post flask

所以我创建了从时间表中获取json数据的代码,并在flask模板上使用for循环打印键值对。这些对中的值在文本字段中,并且您应该能够在提交时更新这些值。问题是我不知道如何安排日程安排中的每堂课,我只是设法做到到第一堂课。

这是我的表格

<form method="POST">
    <body>
    <h1>Uppdatera lektion</h1>
        {%for dict_item in update%}
        <br>
            {%for key, value in dict_item.items()%}
                <br>
                    <b>{{key}}</b>
                    <input type="text" name="values" value="{{value}}"/>
                </br>
            {%endfor%}
        </br>
        {%endfor%}
    <input type=submit value=Registrera>
    </body>
</form>

这是我的发帖方法

if request.method == "POST":
    input_values = request.form.getlist("values")

    url = "https://ltu.instructure.com/api/v1/calendar_events.json"

    payload = {
        'calendar_event[context_code]': "MY_USER",
        'calendar_event[title]': input_values[0],
        'calendar_event[start_at]': input_values[1]+"T"+input_values[2]+"Z",
        'calendar_event[end_at]': input_values[3]+"T"+input_values[4]+"Z",
        'calendar_event[description]': input_values[5]
        }

    headers = {
        'Authorization': "MY_TOKEN",
        'cache-control': "no-cache",
        'Postman-Token': "e0bc1a1c-5baf-47f8-a2ce-62d476040e73"
        }

    r = requests.post(url, data=payload, headers=headers)

    print(r.text)
return "Uppdateringen lyckades!"

这是带有键和值的讲座格式在浏览器上的样子

https://imgur.com/YDIMslw

是的,在这里,我需要一些有关如何继续进行并能够更新所有讲座的建议,而不仅仅是第一堂。预先感谢!

3 个答案:

答案 0 :(得分:0)

我认为您应该将[]添加到表单中的值以使其成为多值,如下所示:

<input type="text" name="values[]" value="{{value}}"/>

答案 1 :(得分:0)

正如我在评论中告诉您的那样,您不应在多个name字段中使用相同的属性input。这使一切变得复杂,首先是因为每个实现对它的解析方式都不一样(没有标准),其次更重要的是,这使您的工作非常困难(我说这是不可能的,但是可能会遗漏某些东西)。

属于{{1}的input_value和属于title的{​​{1}}有何区别?我在您的代码中看到您使用了排序,但是不确定该命令是否保留。另外,您知道`dict_items

的键吗

我建议您使用类似这样的内容:

description

,然后将其获取为:

{% for index, dict_item in enumerate(update) %}
<br>
    <input type="hidden" name="item_count" value="{{ len(update) }}"/>
    {% for key, value in dict_item.items() %}
        <br>
            <b>{{key}}</b>
            <input type="text" name="{{key + index}}" value="{{value}}"/>
        </br>
    {% endfor %}
</br>
{% endfor %}

答案 2 :(得分:0)

@spaniard不幸的是,我无法在我的flask模板中使用python方法,例如enumerate和len。我弄乱了一点,想出了这个:

{%for dict_item in update%}
    <br>
        {%for key, value in dict_item.items()%}
            <br>
                <b>{{key}}</b><input type="hidden" name="keys" value="{{key}}" />
                <input type="text" name="values" value="{{value}}"/>
            </br>
        {%endfor%}
    </br>
{%endfor%}

我在python代码中所做的工作,为两个列表获取了新的键值,并使用它们创建了一个新列表。

input_values = request.form.getlist("values") item_count = request.form.getlist("keys") new_list = list(zip(item_count, input_values))

虽然不确定如何继续前进,但有什么建议吗?