【问题标题】:Issue with django rest framework while handling url-encoded data处理 url 编码数据时 django rest 框架出现问题
【发布时间】:2020-02-19 18:18:54
【问题描述】:

我正在构建一个处理 POST 请求的 REST API 服务器。请求中的内容类型是“application/x-www-form-urlencoded”。在请求正文中,我们发送的是“data1”(一些字符串)和“image”(一个文件)

这是我的示例 inputForm 代码:​​

from django import forms

class RequestForm(forms.Form):
    data1= forms.CharField(label='data1',max_length=10000)
    image = forms.ImageField()

然后我验证表单请求中的内容:

if request.method == 'POST':
        form = RequestForm(request.POST)
        print("Form content: {0}".format(form))
        if form.is_valid():
            print("Works")
        else:
            print("Issue")

现在,当我发送上述数据时,我总是收到错误消息。它打印“问题”。此外,打印表单内容的行将其显示为错误。比如:

<ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="data1" maxlength="10000"

有趣的一点:如果我从请求标头中删除“Content-type”,它会起作用。

关于当我们使用内容类型作为 application/x-www-form-urlencoded 时如何正确读取表单数据的任何输入。

提前谢谢...

【问题讨论】:

    标签: django rest http django-rest-framework


    【解决方案1】:

    根据 Django Forms 文档:

    默认情况下,每个 Field 类都假定该值是必需的,因此如果您传递一个空值——None 或空字符串 ("")——那么 clean() 将引发 ValidationError 异常

    您在正确的轨道上,您应该按照此线程将表单发送为multipart/form-dataThread about form Content types

    【讨论】:

      【解决方案2】:

      找到了解决办法。首先,我在输入中发送一个文件。所以我应该使用内容类型作为“multipart-formdata”。 此外,我正在使用 Postman 来抽取 REST API 请求。在请求的正文中,我设置了表单数据,它会根据我在正文中发送的内容自动正确设置标题。我试图用我自己的标题覆盖它,这是不正确的。

      当我在 Postman 中重新发送没有标头的 http POST 请求时,它起作用了。 (当然,我确实验证了最终的 http 请求本身并确认 Postman 正确设置了标头)

      【讨论】:

        猜你喜欢
        • 2018-09-02
        • 1970-01-01
        • 2022-08-17
        • 2017-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-21
        • 1970-01-01
        相关资源
        最近更新 更多