私は次のようなdjango解析関数を持っています:
def parse_org(request):
try:
org = simplejson.loads(request.POST['org'])
except Exception:
traceback.print_exc()
print org
デコードエラーが発生しました。
クライアント側では、スクリプト版(コードは後半に貼り付けます)は問題なく動作しますが、最近、負荷テストを行うためのPython版を書きたいので、リクエストを送信するPythonクライアントスクリプトに次のコードを記述します。
data_dict = {}
org = ["UCSD", "MIT"]
data_dict["org"] = org
req = urllib2.Request(request_url, urllib.urlencode(data_dict), headers)
response = urllib2.urlopen(req, timeout = 5)
次に、django サイトの解析コードで解析エラーが発生します。私は正しいjavascriptバージョンと間違ったpythonクライアントを比較します.唯一の違いは一重引用符と二重引用符です.django側で間違って解析された入力は次のとおりです:
POST:<QueryDict: {u'org': [u"['UCSD', 'MIT']"], ....
正しい入力は次のとおりです。
POST:<QueryDict: {u'org': [u'["UCSD","MIT"]'], ....
参考までに、javascript 側は次のようになります (django は組織を配列として正しく解析できます)。
var org = [];
org.push("UCSD")
org.push("MIT")
var data = {"org": JSON.stringify(org), ...
}
$.post(url, data, function(data){
callback(data);
});
よく検索しましたが、python クライアントが機能しないのに javascript クライアントは機能する理由がまだわかりません。urllib の urlencode と関係がありますか? そして、なぜそこに一重引用符と二重引用符の違いがあるのですか?
どうもありがとう!