2016-04-05 9 views
0

私はDjango JWT Authを試していましたが、あるタイプの投稿にはうまく反応しますが、別のタイプにはうまく反応しません。私はcURLのPOSTを使用している場合Django JWT Auth、なぜ1つのリクエストがうまくいくのですか?

は、基本的には、readme.mdに言及、すべてが計画に応じて行く:

$ curl -X POST -H "Content-Type: application/json" -d '{"username":"admin","password":"abc123"}' http://localhost:8000/api-token-auth/ 

ができますが、私は同じ情報を持つcURLのPOSTの別のタイプを使用する場合、それはdoesnのトンの仕事:

$ curl -d 'username=admin&password=abc123' http://localhost:8000/api-token-auth/ 

私は、「コンテンツタイプ」はdiferentであることを知っているが、要求は同じように受け入れられるべきではありませんが、彼らは両方ともうまく投稿を形成していますか?

答えて

1

Curlの-dオプションは、実際にはWebブラウザのようにリクエストを送信します。私の推測では、テストしているURLには標準のWebフォームがないため、実際にリクエストを処理できません。

TL; DR確かにDjango JWT Authはapplication/x-www-form-urlencodedコンテンツタイプをサポートしていません。カールマニュアルから

は(HTTP)--data を-dユーザーが を持っているときに、ブラウザが行うのと同じように、HTTP サーバーにPOSTリクエストで指定されたデータを送信します。 HTMLフォームに入力し、送信ボタンを押します。これにより、 コンテンツタイプの application/x-www-form-urlencodedを使用して、カールがサーバーにデータを渡します。 -F、--formと比較してください。

+0

関連するもう1つの質問。 'application/json'を使用してDjangoにPOSTを実行すると、DjangoのPOSTリクエストパーサーは、デフォルトでrequest.POST辞書にJSONパラメータを設定しません。正しい? (ブラウザ 'application/x-www-form-urlencoded'のように投稿すると、これはデフォルトで魔法のように実行されます) – LPS

+0

あなたの質問は分かりませんが、探しているデータが 'リクエストで表示されます。ポストは、request.bodyにある必要があります。出典:https://docs.djangoproject.com/ja/1.9/ref/request-response/ – nathanshimp

+0

はい、それはrequest.bodyに表示されます。私が言っていることは、デフォルトでDjangoはrequest.POST辞書にJSONパラメータ(Content-Type:applcation/json)をロードしないということです。 Content-Type見出しがapplication/x-www-form-urlencodedである典型的なPOSTの場合と同じように、本体データは 'username = some&password = some'の形式で提供されます。私は正しいですか? – LPS

関連する問題