同じプロジェクトの別のDjangoアプリケーションから別のDjangoアプリケーションにPOST要求を送信する必要があります。要求は到着しますが、POSTデータはありません。Djangoアプリケーション間でPOSTデータを送信
なぜですか?そして、POSTデータを正しく送信する方法は?
送信者の一部、アプリ1つのビュー:
def get_project_data(request):
if request.method == "POST":
if request.is_ajax():
response = etl_post('get_data', [request.user.project.id], request.POST)
def etl_post(path, identifiers=None, post_data=None):
def date_handler(obj):
if hasattr(obj, 'isoformat'):
return obj.isoformat()
else:
raise TypeError
json_data = json.dumps(post_data, default=date_handler) if post_data else None
return _request(path, identifiers, json_data)
def _request(path, identifiers=None, post_data=None, method=None):
data = None
try:
url = urlparse.urljoin(settings.ETL_WEB_API_URL, path)
if identifiers is not None:
for o in identifiers:
url += "/" + str(o)
if post_data:
url += "/"
request = urllib2.Request(url, data=post_data)
request.add_header("Content-Type", "application/json")
request.add_header("X-ETL-Authorization", settings.ETL_WEB_API_KEY)
if method:
request.get_method = lambda: method
result = urllib2.urlopen(request)
data_str = result.read()
if result.getcode() == 200:
data = json.loads(data_str)
else:
logger.error("Unexpected response %s" % result)
except Exception as e:
logger.exception(e.message)
return data
はまた、私はresult = urllib2.urlopen(request, data=post_data)
、ノー成功しようとしました。
post_data
例: {"project_id": "nYhRTAmGkkHSlLr8BfPR", "project_name": "rocket-launch", "salt": "805b2892c16369275eerec4dd401f5f", ...}
(Pdb) type(post_data)
<type 'str'>
レシーバー部分、アプリ2ビュー:
@csrf_exempt
def get_project_data(request, trust_id):
if request.method == 'POST':
pdb.set_trace()
到着したメッセージ:あなたはJSONを送っている
(Pdb) request
<WSGIRequest: POST '/pipeline/get_project_data/2/'>
(Pdb) request.POST
<QueryDict: {}>
はい、あなたは正しく 'request.body'です、ありがとうございます。 Djangoのアプリケーション間でデータをやりとりする代替データの例を教えてください。 – trex