You are sending a redirect before you print any content to the page, hence the 0 length.
self.redirect('/?' + urllib.urlencode(query_params)) # redirects
print type(self.response) # never executes
If you look at the Wireshark capture, check out the response code which is a 302 redirect and the Location:
header which tells the browser where to redirect to.
HTTP/1.1 302 Found
Location: http://_______.appspot.com/?guestbook_name=default_guestbook