Проблема с каркасом отдыха django при обработке данных в кодировке URL - PullRequest
1 голос
/ 23 октября 2019

Я создаю REST API-сервер, который обрабатывает POST-запросы. Тип содержимого в запросе «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")

Теперь, когда я отправляю вышеупомянутые данные, я всегда получаю сообщение об ошибке. На нем печатается «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.

заранее спасибо ...

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

Нашел решение. Для начала я отправляю файл на вход. Поэтому я должен использовать тип контента как «multipart-formdata». Кроме того, я использую Postman для прокачки запросов REST API. В теле запроса я устанавливаю данные формы, которые автоматически устанавливают заголовки правильно на основе того, что я отправляю в теле. Я пытался переопределить его своим собственным заголовком, что неправильно.

Когда я повторно отправлял свой запрос HTTP POST без заголовков в Postman, это работало. (конечно, я сам проверил окончательный http-запрос и подтвердил, что Postman правильно устанавливает заголовок)

0 голосов
/ 23 октября 2019

Согласно документации Django Forms:

По умолчанию каждый класс Field предполагает, что значение является обязательным, поэтому, если вы передаете пустое значение - None или пустую строку ("") - тогдаclean () вызовет исключение ValidationError

Вы на правильном пути, вам следует отправить форму как multipart/form-data согласно этой теме: Тема о форме Типы содержимого

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...