I'm experiencing a really bizarre behavior when using the test client in django.
I'm using a POST
to send data to my django app. I usually do this from an iPhone app and/or a test html form. On the server side, this is how I handle it:
def handle_query(request):
print request
q = con.QueryLog()
q.ID = request.POST.get('ID', '')
q.device = request.POST.get('device-model', '')
....
That print statement looks like what you would expect, i.e. each parameter in the post request is turned into a key in the dictionary:
POST: QueryDict: {u'app-version': [u'3.0'], u'server-version': [u'v3d0'],
However, I started writing some tests using Django's test client, and no matter what I try, the dictionary of POST parameters I send in the post request get bunched into a single key in the QueryDict
. Allow me to illustrate with some code:
class SearchTest(TestCase):
def setUp(self):
pass
def test_search(self):
request = HttpRequest()
data = '{"amzn_locale": "com"}'
# request._raw_post_data = data
resp = self.client.post(
'/is/',
data=data,
content_type='application/x-www-form-urlencoded',
# content_type='application/json',
)
The same print statement on the server side shows the inexplicable grouping of the dictionary into a string:
POST: QueryDict: {u'{"amzn_locale":"com"}': [u'']}>,
If I set data to an actual dictionary, same thing
data = {"amzn_locale": "com"}
Setting the request._raw_post_data doesn't change anything. Nor does changing
content_type='application/json'
Any help would be much appreciated. From this stackoverflow question it seems like I'm not the first one to run into this
iphone Json POST request to Django server creates QueryDict within QueryDict
See Question&Answers more detail:
os