【问题标题】:Why not receiving request body as a dictionary - Django为什么不将请求正文作为字典接收 - Django
【发布时间】:2021-02-17 19:08:59
【问题描述】:

我在 Django 中使用手动构建的表单(不是 Forms.formModelForms.form)。

<div class="container">
        <div id="tabs-contents">
            <div id="infos" class="tab-content">

                <form action="/page/" method="POST">
                    {% csrf_token %}
                    <div class="infos-form-content">
                        <div class="infos-row-1">
                            <input id="field1" type="text" value="" name="field1">
                            <input id="field2" type="text" value="" name="field2">
                        </div>
                        <div class="infos-row-2">
                            <input id="field3" type="date" value=""
                                name="field3">
                        </div>
           ...
           ...
                    </div>
                  <button type="submit">Save</button>
                   </form>
                  </div>
                 </div>                        
             </div>

它还包含动态输入字段(由 JavaScript 创建)。 当我在视图中检查request.body 类型时(当然是在解码request.body.decode('utf-8') 之后),我发现它是一个字符串而不是字典。为什么会这样?以及如何接收dict中的表单数据?

【问题讨论】:

    标签: python-3.x django django-views django-forms


    【解决方案1】:

    request.body 不返回字典。您必须在视图中指定请求的类型才能获取字典,例如request.GETrequest.POST

    另外,请注意这些实际上不是字典,而是像字典一样工作的对象(更具体地说是django.http.request.QueryDict),因此存在一些差异。

    要获取您发布的数据并对其进行循环,您可以执行以下操作:

    data = request.POST
    for key in data:
        print(f'{key}: {data[key]}')
    

    【讨论】:

    • 是的,我检查过if request.method == 'POST'。但我可以在其他请求中使用 json.loads() 加载 reauest:body,然后访问如下字段值:body['field'].
    • 我不是这个意思。 request.POST 有字典。所以,如果你想获取输入 field1 的值,你可以使用request.POST['field1']。我希望这能解决问题。
    • 谢谢,这对我有帮助。
    猜你喜欢
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    • 2015-06-13
    • 2012-02-04
    • 2016-11-14
    • 2018-06-08
    相关资源
    最近更新 更多