私はdjango 1.9を使用しています。カールを使ってdjango 1.9にデータを投稿
私は、次のフィールドを使用してフォームを持っている:私は、ブラウザからアクセスする際
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
しかし、私は端末から同じコマンドを実行すると、それが提出されたファイルが空である」と言っ
========最終編集======== が見つかり解決策。以下の回答に追加してください。
あなたはより多くの実装の詳細が必要な場合は、ジャンゴでhttps://github.com/kiran-vemuri/DevServe
をあなたはそれゆえ、エラー、フォームデータを送信していません。 [この質問](http://スーパーユーザー。curlを使用してフォームデータを送信する方法については、com/questions/149329/what-is-the-curl-command-line-syntax-to-do-a-post-request)を参照してください。 – solarissmoke
ビューを表示してください。そこにJSONを処理していますか?そうでない場合は、なぜJSONを送信していますか? –
curlコマンドを簡単に入手するには:開発ツールを開いたままブラウザ(chrome)でフォームを送信します。次に、リクエストを右クリックして、[カールとしてコピー]を選択します。 – ohrstrom