Bir webhook için son nokta olarak hizmet verecek bir django üzerinde çalışıyorum. Web sayfası, bazı JSON verilerini son noktaya gönderecek ve ardından bu verileri ayrıştıracaktır. Bunun için birim testleri yazmaya çalışıyorum, ancak JSON'u doğru şekilde gönderip göndermediğimden emin değilim.django test istemcisini kullanarak JSON gönderme
ben almaya devam
# tests.py
from django.test import TestCase
from django.test.client import Client
import simplejson
class TestPipeline(TestCase):
def setUp(self):
"""initialize the Django test client"""
self.c = Client()
def test_200(self):
json_string = u'{"1": {"guid": "8a40135230f21bdb0130f21c255c0007", "portalId": 999, "email": "[email protected]"}}'
json_data = simplejson.loads(json_string)
self.response = self.c.post('/pipeline-endpoint', json_data, content_type="application/json")
self.assertEqual(self.response.status_code, "200")
ve
# views.py
from pipeline.prospect import Prospect
import simplejson
def pipeline_endpoint(request):
#get the data from the json object that came in
prospects_json = simplejson.loads(request.raw_post_data)
for p in prospects_json:
prospect = {
'email' : p['email'],
'hs_id' : p['guid'],
'portal' : p['portalId'],
}
Düzenleme: Bütün geri izleme: Burada
pipeline_endpoint
yılında "TypeError dize endeksleri tamsayılar olmalı" kod.======================================================================
ERROR: test_200 (pipeline.tests.TestPipeline)
----------------------------------------------------------------------
Traceback (most recent call last):
File "F:\......\pipeline\tests.py", line 31, in test_200
self.response = self.c.post('/pipeline-endpoint', json_string, content_type="application/json")
File "C:\Python27\lib\site-packages\django\test\client.py", line 455, in post
response = super(Client, self).post(path, data=data, content_type=content_type, **extra)
File "C:\Python27\lib\site-packages\django\test\client.py", line 256, in post
return self.request(**r)
File "C:\Python27\lib\site-packages\django\core\handlers\base.py", line 111, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "F:\......\pipeline\views.py", line 18, in pipeline_endpoint
'email' : p['email'],
TypeError: string indices must be integers
----------------------------------------------------------------------
Ran 1 test in 0.095s
FAILED (errors=1)
Destroying test database for alias 'default'...
Lütfen tüm kayıt detaylarını göster –
traceback ile güncellendi! –
Öyleyse ... çünkü json.loads' yerine (string ile) json.dumps' (bir python nesnesiyle) kullanmalısınız, ve böylece müşteri isteğinizle bir python nesnesi üzerinden gönderiyorsunuz. json nesnesi olarak serileştirilmiş bir python nesnesinden daha mı? – mrmagooey