Thanks for the pdb tip Bill!

I tried pdb at the point where the request enters Tastypie (based on 
http://stackoverflow.com/questions/13006901/tastypie-obj-create-method-not-being-called).
 
What I see is that the request.POST and request.raw_post_data are both 
empty. I posted from Android client to a posttestserver and I can see that 
all the headers I set and the request body are set.

However it does say that there are no POST parameters. Here is the logged 
request - http://posttestserver.com/data/2013/03/23/06.42.591241431084. Any 
idea what that means? Note that I had to remove the authorization header to 
post to this server.

Also I'm not sure now where else to start the trace from. Is there another 
place I can pdb trace my HTTP request when it enters the app? Is it 
possible some data gets stripped off the original request somewhere?

Thanks.

Pratik






On Saturday, March 23, 2013 5:50:28 PM UTC+5:30, ke1g wrote:
>
> Still, if you have a break point where the request comes in to the view, 
> you can inspect the POST data to see how it differs from what you expect.  
> That might inform you as to what you might do differently in your 
> JavaScript, whether you need some additional or different encoding or 
> quoting of the data, whether you need to be more explicit about the 
> content-type header (you may have to look at the WSGI request object 
> itself), etc.  Or you may discover that you need to breakpoint at the WSGI 
> application script level to see what you need to see.
>
> Since nobody has jumped in with "I recognize that problem", inspecting 
> your data is probably a good use of your time.  pdb is not hard to use, as 
> long as you are using runserver (and you can almost always arrange to 
> explore a problem under runserver) because there has to be a console for 
> pdb to type on, and on which you can type commands.  The first breakpoint 
> is the only django specific trick.  Put
>
>     import pdb; pdb.set_trace()
>
> where you want to stop.  You can use the b command to set additional 
> breakpoints later, but that can be confusing due to threading.  pdb is 
> documented in the library reference for your python version at python.org.  
> Read up on the p, pp, u, d, c, n, s, r, !, and q, commands, probably in 
> that order, and you will find that you usually only use the first 5 of 
> them.  (There are more, for when you want to be a pdb expert.)  And 
> remember to start with a p or pp when you want to see the value of an 
> expression, lest your expression be interpreted as one of the other 
> commands.
>
> Bill
>
> On Sat, Mar 23, 2013 at 5:19 AM, Pratik Mandrekar 
> <[email protected]<javascript:>
> > wrote:
>
>> The issue is with setting data in the http post request. I have tried it 
>> with curl and the web client and it works. CSRF is not the issue, requests 
>> work fine without the csrftoken outside of the android client.
>>
>> Pratik
>>
>>
>>
>> On Saturday, March 23, 2013 12:01:21 AM UTC+5:30, ke1g wrote:
>>
>>> Have you tried a breakpoint in the view?  Might it be a CSRF problem?
>>>
>>> On Fri, Mar 22, 2013 at 2:22 PM, Pratik Mandrekar 
>>> <[email protected]>wrote:
>>>
>>>> Hello,
>>>>
>>>> I'm unable to get the POST json to tastypie from an android http client 
>>>> to work.
>>>>  
>>>> *I have tried with HttpURLConnection*
>>>>
>>>> urlConnection = (HttpURLConnection) url.openConnection();
>>>>
>>>>
>>>> urlConnection.setDoInput(true)****;
>>>>
>>>>  urlConnection.setDoOutput(**true**);
>>>>
>>>>  urlConnection.**setRequestProper**ty("Content-**Type", 
>>>> "application/json");
>>>>
>>>> byte [] encoded = 
>>>> Base64.encode((username+":"+**pa**ssword).getBytes("UTF-8"), 
>>>> Base64.DEFAULT); 
>>>>
>>>>  urlConnection.**setRequestProper**ty("**Authorization", "Basic "+ new 
>>>> String(encoded, "UTF-8"));
>>>>
>>>>
>>>> JSONObject jsonObject = new JSONObject();
>>>>
>>>> jsonObject.put("key1", "value1");
>>>>
>>>> jsonObject.put("key2", "value2");
>>>>
>>>>   outputStreamWriter = urlConnection.getOutputStream(****);
>>>>
>>>>  outputStreamWriter.write(**jsonO**bject.toString().**getBytes());
>>>>
>>>>  outputStreamWriter.flush(); 
>>>>
>>>>  
>>>>
>>>>
>>>> *And I have tried with Apache HttpClient*
>>>>
>>>> HttpClient client=new DefaultHttpClient();
>>>>
>>>> HttpPost post = new HttpPost(url);
>>>>
>>>>         
>>>>
>>>> post.setHeader("accept", "application/json");
>>>>
>>>> post.addHeader("Content-Type", "application/json");
>>>>
>>>> post.addHeader("Authorization"****, "Basic "+ new String(encoded, 
>>>> "UTF-8"));
>>>>
>>>>  
>>>>
>>>> ArrayList localArrayList = new ArrayList();
>>>>
>>>> localArrayList.add(new BasicNameValuePair("json",**json**
>>>> Object.toString()));
>>>>
>>>>        
>>>>
>>>>  lotlisting.setEntity(new UrlEncodedFormEntity(**localArra**yList));
>>>>
>>>>   String str = EntityUtils.toString(**localDefa**ultHttpClient.**
>>>> execute(**lotlisting).getEntity(**));
>>>>
>>>>
>>>> StringEntity se = new StringEntity( jsonObject.toString());  
>>>>
>>>> se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, 
>>>> "application/json"));
>>>>
>>>>                 
>>>>
>>>>  post.setEntity(se);
>>>>
>>>>                 
>>>>
>>>>  HttpResponse response = client.execute(post); 
>>>>
>>>>
>>>> I hit the same issue with both of them i.e the POST data as seen as 
>>>> Querydict in Django, does not have any data. This makes it an invalid json 
>>>> and it throws a JSON could not be decoded error.
>>>>
>>>> I have tried playing with all the parameters with little luck. Note 
>>>> that *get works perfectly*, even with parameters. 
>>>>
>>>> Has anyone been successfully able to post json from an android client 
>>>> to django/tastypie? If yes, could you please share what worked for you?
>>>>
>>>> Thanks.
>>>>
>>>> Pratik
>>>>
>>>> -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "Django users" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to django-users...@**googlegroups.com.
>>>> To post to this group, send email to [email protected].
>>>>
>>>> Visit this group at 
>>>> http://groups.google.com/**group/django-users?hl=en<http://groups.google.com/group/django-users?hl=en>
>>>> .
>>>> For more options, visit 
>>>> https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out>
>>>> .
>>>>  
>>>>  
>>>>
>>>
>>>  -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Django users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> To post to this group, send email to [email protected]<javascript:>
>> .
>> Visit this group at http://groups.google.com/group/django-users?hl=en.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>  
>>  
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to