On 11 juin, 14:36, Andres <[email protected]> wrote:
> 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"}'
That's a string representation of plain dict.
> # 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'']}>,
What else did you expect exactly ? You're supposed to pass a dict, not
a string representation of a dict.
> If I set data to an actual dictionary, same thing
>
> data = '{"amzn_locale":"com"}'
This is the exact same string. Remove the surrounding single quotes if
you want a dict litteral.
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/django-users?hl=en.