2013-04-25 6 views
8

です:ジャンゴ&TastyPie:request.POSTは、私はカールを使用してPOSTをやろうとしている空

curl --dump-header - -H "Content-Type: application/json" -X POST --data '{"item_id": "1"}' http://www.mylocal.com:8000/api/1/bookmarks/ 

はしかし、request.POSTは常に空です。以下は

は私ModelResourceコードです:

class BookmarkResource(ModelResource): 


    class Meta: 
     queryset = Bookmark.objects.all()  
     resource_name = 'bookmarks' 
     fields = ['id', 'tags'] 
     allowed_methods = ['get', 'post', 'delete', 'put'] 
     always_return_data = True 
     authorization= Authorization() 
     include_resource_uri = False 

    def determine_format(self, request): 
     return "application/json" 

    def obj_create(self, bundle, **kwargs): 

     request = bundle.request 

     try: 
      payload = simplejson.loads(request.POST.keys()[0]) 
     except: 
      payload = simplejson.loads(request.POST.keys()) 

誰もが私が欠けている知っていますか?

ありがとうございます。

答えて

29

Django 1.5以降、POSTには非フォームデータは含まれていません。彼らは今request.bodyにいる。

https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.POST

+0

http://stackoverflow.com/questions/1208067/wheres-my-json-data-in-my-incoming-django-requestも参照してください。 – Seth

+1

@dannyroa "フォームデータ"と "非フォームデータ"は何を区別していますか? – rrauenza

+1

... Djangoソースを見ると、 '_load_post_and_files()'で定義され、 'CONTENT_TYPE' - ' multipart/form-data'と 'application/x-www-form-urlencoded' – rrauenza

0

私は期待していたが--dataのように見えた私のクロームのdevのツールのうちのPOSTリクエストをコピーするには、次のcURLないよ:あなたがあなたのコマンドを変更することができますように

--data "foo=bar&bar=foo"

だから、それが見えます:

--data item_id="1"

サイドノート: 私は非常にfollowinのいずれかをお勧めすることができます

Advanced REST clientか、ブラウザでのコール(フォーム提出などなど)を作ることができればさらにDev HTTP Client

その後、クロームのdevのツールネットワークパネルであなたにリクエストをコピーすることができます:グラムChromeはHTTPリクエストを作成するためのアプリcURLコマンド(右クリック)

+0

私はREST Client Chrome Appを試しましたが、同じ問題がありました。 – dannyroa

+0

あなたは 'request'で利用できるものを見るためにpdb/ipdbを試しましたか? – rockingskier

+0

ええ、私はそれをトレースするためにipdbを使いました。 RESTクライアントでは、Content-Typeを "application/json"に設定しました。 – dannyroa

関連する問題