7

私はdjangoでApacheサーバーをセットアップし、それをテストするために、views.pyで非常に単純な関数を作成しました

channel = rabbit_connection()
@csrf_protect
@csrf_exempt
def index(request): 
    data={'text': 'Food truck is awesome! ', 'email': 'bob@yahoo.com', 'name': 'Bob'}
    callback(json.dumps(data))   
    context = RequestContext(request)    
    return render_to_response('index.html', context_instance=context)

GETまたはPOSTリクエストをサーバーに送信すると、この関数は正常に機能します。POSTただし、リクエストからこのデータを取得したいと思います。次のようなリクエストを送信すると仮定します。

import pycurl
import simplejson as json

data = json.dumps({'name':'Bob', 'email':'bob@yahoo.com', 'text': u"Food truck is awesome!"})

c = pycurl.Curl()
c.setopt(c.URL, 'http://ec2-54-......compute-1.amazonaws.com/index.html')
c.setopt(c.POSTFIELDS, data)
c.setopt(c.VERBOSE, True)

for i in range(100):
    c.perform()

ビューに入れたいのは、次のようなものです。

 if request.method == 'POST':
     data = ?????? # Something that will return me my dictionary

念のため: 常に JSON 形式になり、フィールドは不明です。

4

2 に答える 2

6

data= request.POST.get('data','')

data辞書から単一の値 (key= ) を返します。辞書全体が必要な場合は、単にrequest.POST. ここで QueryDict クラスを使用しています。

HttpRequest オブジェクトでは、GET および POST 属性は django.http.QueryDict のインスタンスです。QueryDict は、同じキーの複数の値を処理するためにカスタマイズされた辞書のようなクラスです。一部の HTML フォーム要素、特に は同じキーに対して複数の値を渡すため、これが必要です。

copy() を作成しない限り、QueryDict インスタンスは不変です。つまり、request.POST と request.GET の属性を直接変更することはできません。

-Djangoドキュメント

于 2013-07-02T19:12:05.223 に答える
1

投稿されたデータが JSON 形式の場合は、逆シリアル化する必要があります。

import simplejson
myDict = simplejson.loads(request.POST.get('data'))
于 2013-07-02T19:40:38.277 に答える