Я использую django 1.9.Использование curl для отправки данных в django 1.9 form
У меня есть форма, которая использует следующие поля:
class UploadFileForm(forms.Form):
component = forms.ChoiceField(choices=[(int(x.id), x.name) for x in Component.objects.all()])
title = forms.CharField(max_length=200)
notes = forms.CharField(max_length=2000, widget=forms.Textarea(attrs={'rows': 5}))
file = forms.FileField()
я могу использовать форму идеально, когда я к нему доступ из браузера.
Но когда я пытаюсь использовать локон, чтобы заполнить форму, я получаю ошибку «Это поле обязательно»
<ul class="errorlist"><li>This field is required.</li></ul>
<p><label for="id_title">Title:</label> <input id="id_title" maxlength="200" name="title" type="text" /></p>
<ul class="errorlist"><li>This field is required.</li></ul>
<p><label for="id_notes">Notes:</label> <textarea cols="40" id="id_notes" maxlength="2000" name="notes" rows="5">
</textarea></p>
<ul class="errorlist"><li>This field is required.</li></ul>
<p><label for="id_file">File:</label> <input id="id_file" name="file" type="file" /></p>
<button type="submit"> upload file</button>
Мои csrdmiddlewaretoken
в настоящее время принимаются должным образом, как я могу видеть, что в выход ответа.
Вот различные запросы локон я пытался:
`curl <url> \
-X POST -H "Content-Type: application/json" \
-H "Accept: text/html,application/json" \
-H "X-CSRFToken: <token grabbed from form page source>" \
-H "Cookie: csrftoken=<token grabbed from form page source>" \
-d 'title=testCurl'`
`curl <url> \
-X POST -H "Content-Type: application/json" \
-H "Accept: text/html,application/json" \
-H "X-CSRFToken: <token grabbed from form page source>" \
-H "Cookie: csrftoken=<token grabbed from form page source>" \
-F 'title=testCurl'`
`curl <url> \
-X POST -H "Content-Type: application/json" \
-H "Accept: text/html,application/json" \
-H "X-CSRFToken: <token grabbed from form page source>" \
-H "Cookie: csrftoken=<token grabbed from form page source>" \
-d '{"title":"testCurl"}'`
Как только это работает, мне нужно найти способ, чтобы передать файл в поле файла.
Может ли кто-нибудь помочь мне с этим?
----- редактирует: На основании предложения от @ohrstrom:
Я вижу следующее, когда я делаю «копию как завиток» из инструментов разработчика Chrome.
curl 'http://localhost:8000/releases/binary_upload' -H 'Cookie: JSESSIONID=84666B9EE0BB747F04AC3179FEB78F65; csrftoken=E50JjoNz1qigYUehGdxPjnsscCNaFslu' -H 'Origin: http://localhost:8000' -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: en-US,en;q=0.8' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36' -H 'Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryn3n6mrAf19RXCh3A' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Cache-Control: max-age=0' -H 'Referer: http://localhost:8000/releases/binary_upload' -H 'Connection: keep-alive' -H 'DNT: 1' --data-binary $'------WebKitFormBoundaryn3n6mrAf19RXCh3A\r\nContent-Disposition: form-data; name="csrfmiddlewaretoken"\r\n\r\nE50JjoNz1qigYUehGdxPjnsscCNaFslu\r\n------WebKitFormBoundaryn3n6mrAf19RXCh3A\r\nContent-Disposition: form-data; name="component"\r\n\r\n13\r\n------WebKitFormBoundaryn3n6mrAf19RXCh3A\r\nContent-Disposition: form-data; name="title"\r\n\r\ntest1\r\n------WebKitFormBoundaryn3n6mrAf19RXCh3A\r\nContent-Disposition: form-data; name="notes"\r\n\r\ntest123\r\n------WebKitFormBoundaryn3n6mrAf19RXCh3A\r\nContent-Disposition: form-data; name="file"; filename="Topology_Components.png"\r\nContent-Type: image/png\r\n\r\n\r\n------WebKitFormBoundaryn3n6mrAf19RXCh3A--\r\n' --compressed
Но когда я выполнить ту же команду из терминала, он говорит: «Представленный файл пуст»
======== ======== Final Редактировать Найдено решение. Добавьте его к ответам ниже.
Если вам нужно больше деталей реализации, вы можете найти его на https://github.com/kiran-vemuri/DevServe
Вы не отсылают данные формы, поэтому ошибки. См. [Этот вопрос] (http: // superuser.com/questions/149329/what-is-the-curl-command-line-syntax-to-do-a-post-request) для отправки данных формы с помощью curl. – solarissmoke
Пожалуйста, покажите представление. Вы обрабатываете JSON? Если нет, почему вы отправляете JSON? –
Чтобы легко получить команду curl: отправьте форму через браузер (хром) с открытыми инструментами разработчика. Затем вы можете щелкнуть правой кнопкой мыши запрос и выбрать «copy in curl». – ohrstrom