2017-09-15 5 views
1

次のビューにPOSTリクエストを送信する場合、request.POST辞書が空である:空request.POST

@csrf_exempt 
def created_query(request): 
    if request.method == 'POST': 
     print(request.POST) 
     server = get_object_or_404(Server, pk=request.POST['server']) 
     if server.owner == request.user: 
      if server.created: 
       return HttpResponse("created") 
      else: 
       return HttpResponse("pending") 
     else: 
      return HttpResponseForbidden 
    else: 
     return HttpResponseForbidden 

Iは、このcURLの要求としてPOST要求を生成する複数の方法で試みました:

curl --request POST \ 
--url http://localhost:80/created/ \ 
--form server=60 \ 
--form action=created 

私はデバッガを使用して辞書をチェックして印刷していますが、それは常に空です。我々はすでに試した

url(r'^created/', views.created_query, name='created'), 

物事:

私はそれはしかし、ここ urls.pyに問題がこのビューを扱うファイルの行である疑い
+2

投稿内容は何ですか? – Hisagr

+0

これはフォーム経由では送信されていませんが、実際にはCURL要求からわかるようにbody、server&actionの2つの項目を取るAPIエンドポイントです。しかし、これらはどちらも最後のリクエストには存在しません。しかし、@Hisagr –

答えて

1

Django 1.5以降、POSTには非フォームデータは含まれていません。

request.bodyを使用できます。

+0

Djangoのドキュメントの 'request.post'に関する情報はありますか?私は 'POST'のために多くを見ることができますが、Googleは小文字と大文字の違いはうまくいきません。 –

+0

もしdjangoだけを使用しているのであれば、 'request.body'を使うことができます。そしてrequest.postはdjango restフレームワークでのみ使用します。ここに[documentation](https://docs.djangoproject.com/en/1.11/releases/1.5/#non-form-data-in-http-requests)があります。 – KyleDing

関連する問題