So far, this seems to work fine. I struggle though when trying to write
this data in my database.
I tried doing:
data = sj.loads(request.body.read())
#and later
return dict(db.someDatabase.insert(data))
#or
return dict(db.someDatabase.validate_and_insert(data))
for all of which I got the error message:
insert() takes exactly 1 argument (2 given)
Any ideas on how to solve this would be highly appreciated.
Regards,
Philipp
Am Mittwoch, 24. Oktober 2012 11:23:09 UTC+2 schrieb Niphlod:
>
> For future users reading this thread... this means that the Iphone sent
> the JSON object POSTing to the page directly in the data stream, without
> "the usual" form encoding. For that, you can access what has been posted
> "in raw format" with request.body.read().
>
> PS: Keep the code small
>
> import gluon.contrib.simplejson as sj #just if you don't have simplejson
> in python path
> #in that case "import simplejson as sj" works
> data = sj.loads(request.body.read())
>
>
>
> On Wednesday, October 24, 2012 9:22:13 AM UTC+2, Mchurch wrote:
>>
>> import gluon.contrib.simplejson
>> data = gluon.contrib.simplejson.loads(request.body.read())
>>
>> That was the trick....
>> Thank You Niphlod, You put me in the right direction.
>> IOS + WEB2PY = beautiful combination!!
>> Mchurch
>> Il giorno mercoledì 24 ottobre 2012 09:01:40 UTC+2, Mchurch ha scritto:
>>>
>>> Hi Niphlod, did You hope to be free of me so soon? :)
>>> Looking at web2py errors, if i make a post request values are empty (not
>>> if i make a GET, but the final result is the same).
>>> Using "CHARLES, web debugging proxy" i can see that data are dispatched
>>> with correct values and correct Content-Type (application/Json).
>>> Im doing my best....
>>>
>>>
>>>
>>>
>>>
>>> POST /Json/default/ricevo HTTP/1.1
>>> Host 127.0.0.1:8000 Accept */* Accept-Encoding gzip Content-Length
>>> 36 Accept-Language en, fr, de, ja, nl, it, es, pt, pt-PT, da, fi, nb,
>>> sv, ko, zh-Hans, zh-Hant, ru, pl, tr, uk, ar, hr, cs, el, he, ro, sk, th,
>>> id, ms, en-GB, ca, hu, vi, en-us;q=0.8 Content-Type application/json;
>>> charset=utf-8 Connection keep-alive User-Agent mirko.json/1.0
>>> (unknown, iPhone OS 6.0, iPhone Simulator, Scale/1.000000)
>>>
>>>
>>> <type 'exceptions.TypeError'>(expected string or buffer)
>>>>
>>>> inspect attributes
>>>>
>>>> -
>>>>
>>>> *Function argument list
>>>> *(self=<json.decoder.JSONDecoder object>, s=<Storage {}>,
>>>> _w=<built-in method match of _sre.SRE_Pattern object>)
>>>>
>>>> *Code listing
>>>> *
>>>> *Variables*
>>>> -
>>>> -
>>>>
>>>> *Context*
>>>>
>>>> locals
>>>>
>>>>
>>>>
>>>> request
>>>>
>>>>
>>>>
>>>> session
>>>>
>>>>
>>>>
>>>> response
>>>>
>>>> locals
>>>>
>>>> *s*
>>>>
>>>> :
>>>>
>>>> <Storage {}>
>>>>
>>>> *self*
>>>>
>>>> :
>>>>
>>>> <json.decoder.JSONDecoder object>
>>>>
>>>> request
>>>>
>>>> *ajax*
>>>>
>>>> :
>>>>
>>>> False
>>>>
>>>> *application*
>>>>
>>>> :
>>>>
>>>> Json
>>>>
>>>> *args*
>>>>
>>>> :
>>>>
>>>>
>>>> *body*
>>>>
>>>> :
>>>>
>>>> <open file '<fdopen>', mode 'w+b' at 0x11c143c00>
>>>>
>>>> *client*
>>>>
>>>> :
>>>>
>>>> 127.0.0.1
>>>>
>>>> *controller*
>>>>
>>>> :
>>>>
>>>> default
>>>>
>>>> *cookies*
>>>>
>>>> :
>>>>
>>>>
>>>> *env*
>>>>
>>>> :
>>>>
>>>> *app_folders*
>>>>
>>>> :
>>>>
>>>> set(['/Users/marcoMchurch/Sites/web2py/applications/Json/',
>>>> '/Users/marcoMchurch/Sites/web2py/applications/welcome/',
>>>> '/Users/marcoMchurch/Sites/web2py/applications/admin/'])
>>>>
>>>> *applications_parent*
>>>>
>>>> :
>>>>
>>>> /.…../web2py
>>>>
>>>> *cmd_args*
>>>>
>>>> :
>>>>
>>>>
>>>> *cmd_options*
>>>>
>>>> :
>>>>
>>>> <Values at 0x1104a53f8: {'verbose': False, 'ip': '127.0.0.1',
>>>> 'shutdown_timeout': 5, 'taskbar': False, 'nocron': False, 'pid_filename':
>>>> 'httpserver.pid', 'maxthreads': None, 'softcron': False, 'server_name':
>>>> 'marcos-', 'bpython': False, 'nogui': False, 'port': 8000, 'extcron':
>>>> False, 'debuglevel': 30, 'test': None, 'folder':
>>>> '/Users/marcoMchurch/Sites/web2py', 'config': '', 'import_models': False,
>>>> 'winservice': '', 'shell': None, 'run': '', 'log_filename':
>>>> 'httpserver.log', 'args': [''], 'socket_timeout': 1, 'ssl_ca_certificate':
>>>> None, 'scheduler': None, 'profiler_filename': None, 'ssl_private_key': '',
>>>> 'password': '<ask>', 'request_queue_size': 5, 'ssl_certificate': '',
>>>> 'cronjob': False, 'numthreads': None, 'quiet': False, 'interfaces': None,
>>>> 'minthreads': None, 'timeout': 10, 'plain': False, 'nobanner': False}>
>>>>
>>>> *content_length*
>>>>
>>>> :
>>>>
>>>> 36
>>>>
>>>> *content_type*
>>>>
>>>> :
>>>>
>>>> application/json; charset=utf-8
>>>>
>>>> *db_sessions*
>>>>
>>>> :
>>>>
>>>> set([])
>>>>
>>>> *debugging*
>>>>
>>>> :
>>>>
>>>> False
>>>>
>>>> *gluon_parent*
>>>>
>>>> :
>>>>
>>>> ….web2py
>>>>
>>>> *http_accept*
>>>>
>>>> :
>>>>
>>>> */*
>>>>
>>>> *http_accept_encoding*
>>>>
>>>> :
>>>>
>>>> gzip
>>>>
>>>> *http_accept_language*
>>>>
>>>> :
>>>>
>>>> en, fr, de, ja, nl, it, es, pt, pt-PT, da, fi, nb, sv, ko, zh-Hans,
>>>> zh-Hant, ru, pl, tr, uk, ar, hr, cs, el, he, ro, sk, th, id, ms, en-GB,
>>>> ca,
>>>> hu, vi, en-us;q=0.8
>>>>
>>>> *http_connection*
>>>>
>>>> :
>>>>
>>>> keep-alive
>>>>
>>>> *http_content_length*
>>>>
>>>> :
>>>>
>>>> 36
>>>>
>>>> *http_content_type*
>>>>
>>>> :
>>>>
>>>> application/json; charset=utf-8
>>>>
>>>> *http_host*
>>>>
>>>> :
>>>>
>>>> 127.0.0.1:8000
>>>>
>>>> *http_user_agent*
>>>>
>>>> :
>>>>
>>>> mirko.json/1.0 (unknown, iPhone OS 6.0, iPhone Simulator,
>>>> Scale/1.000000)
>>>>
>>>> *is_jython*
>>>>
>>>> :
>>>>
>>>> False
>>>>
>>>> *is_pypy*
>>>>
>>>> :
>>>>
>>>> False
>>>>
>>>> *path_info*
>>>>
>>>> :
>>>>
>>>> /Json/default/ricevo
>>>>
>>>> *query_string*
>>>>
>>>> :
>>>>
>>>>
>>>> *remote_addr*
>>>>
>>>> :
>>>>
>>>> 127.0.0.1
>>>>
>>>> *remote_port*
>>>>
>>>> :
>>>>
>>>> 60150
>>>>
>>>> *request_method*
>>>>
>>>> :
>>>>
>>>> POST
>>>>
>>>> *script_name*
>>>>
>>>> :
>>>>
>>>>
>>>> *server_name*
>>>>
>>>> :
>>>>
>>>> marcos-……
>>>>
>>>> *server_port*
>>>>
>>>> :
>>>>
>>>> 8000
>>>>
>>>> *server_protocol*
>>>>
>>>> :
>>>>
>>>> HTTP/1.1
>>>>
>>>> *server_software*
>>>>
>>>> :
>>>>
>>>> Rocket 1.2.4
>>>>
>>>> *web2py_crontype*
>>>>
>>>> :
>>>>
>>>> hard
>>>>
>>>> *web2py_path*
>>>>
>>>> :
>>>>
>>>> /Users/marcoMchurch/Sites/web2py
>>>>
>>>> *web2py_version*
>>>>
>>>> :
>>>>
>>>> 1
>>>>
>>>> 99
>>>>
>>>> 4
>>>>
>>>> datetime.datetime(2011, 12, 14, 14, 46, 14)
>>>>
>>>> stable
>>>>
>>>> *wsgi_errors*
>>>>
>>>> :
>>>>
>>>> <open file '<stderr>', mode 'w' at 0x10f7b2270>
>>>>
>>>> *wsgi_file_wrapper*
>>>>
>>>> :
>>>>
>>>> <class wsgiref.util.FileWrapper at 0x1103c1328>
>>>>
>>>> *wsgi_input*
>>>>
>>>> :
>>>>
>>>> <socket._fileobject object at 0x117971950>
>>>>
>>>> *wsgi_multiprocess*
>>>>
>>>> :
>>>>
>>>> False
>>>>
>>>> *wsgi_multithread*
>>>>
>>>> :
>>>>
>>>> True
>>>>
>>>> *wsgi_run_once*
>>>>
>>>> :
>>>>
>>>> False
>>>>
>>>> *wsgi_url_scheme*
>>>>
>>>> :
>>>>
>>>> http
>>>>
>>>> *wsgi_version*
>>>>
>>>> :
>>>>
>>>> 1
>>>>
>>>> 0
>>>>
>>>> *extension*
>>>>
>>>> :
>>>>
>>>> html
>>>>
>>>> *folder*
>>>>
>>>> :
>>>>
>>>> /Users/marcoMchurch/Sites/web2py/applications/Json/
>>>>
>>>> *function*
>>>>
>>>> :
>>>>
>>>> ricevo
>>>>
>>>> *get_vars*
>>>>
>>>> :
>>>>
>>>>
>>>> *global_settings*
>>>>
>>>> :
>>>>
>>>> *app_folders*
>>>>
>>>> :
>>>>
>>>> set(['/Users/marcoMchurch/Sites/web2py/applications/Json/',
>>>> '/Users/marcoMchurch/Sites/web2py/applications/welcome/',
>>>> '/Users/marcoMchurch/Sites/web2py/applications/admin/'])
>>>>
>>>> *applications_parent*
>>>>
>>>> :
>>>>
>>>> /Users/marcoMchurch/Sites/web2py
>>>>
>>>> *cmd_args*
>>>>
>>>> :
>>>>
>>>>
>>>> *cmd_options*
>>>>
>>>> :
>>>>
>>>> <Values at 0x1104a53f8: {'verbose': False, 'ip': '127.0.0.1',
>>>> 'shutdown_timeout': 5, 'taskbar': False, 'nocron': False, 'pid_filename':
>>>> 'httpserver.pid', 'maxthreads': None, 'softcron': False, 'server_name': '
>>>> marcos-imac.homenet.telecomitalia.it', 'bpython': False, 'nogui':
>>>> False, 'port': 8000, 'extcron': False, 'debuglevel': 30, 'test': None,
>>>> 'folder': '/Users/marcoMchurch/Sites/web2py', 'config': '',
>>>> 'import_models': False, 'winservice': '', 'shell': None, 'run': '',
>>>> 'log_filename': 'httpserver.log', 'args': [''], 'socket_timeout': 1,
>>>> 'ssl_ca_certificate': None, 'scheduler': None, 'profiler_filename': None,
>>>> 'ssl_private_key': '', 'password': '<ask>', 'request_queue_size': 5,
>>>> 'ssl_certificate': '', 'cronjob': False, 'numthreads': None, 'quiet':
>>>> False, 'interfaces': None, 'minthreads': None, 'timeout': 10, 'plain':
>>>> False, 'nobanner': False}>
>>>>
>>>> *db_sessions*
>>>>
>>>> :
>>>>
>>>> set([])
>>>>
>>>> *debugging*
>>>>
>>>> :
>>>>
>>>> False
>>>>
>>>> *gluon_parent*
>>>>
>>>> :
>>>>
>>>> /Users/marcoMchurch/Sites/web2py
>>>>
>>>> *is_jython*
>>>>
>>>> :
>>>>
>>>> False
>>>>
>>>> *is_pypy*
>>>>
>>>> :
>>>>
>>>> False
>>>>
>>>> *web2py_crontype*
>>>>
>>>> :
>>>>
>>>> hard
>>>>
>>>> *web2py_version*
>>>>
>>>> :
>>>>
>>>> 1
>>>>
>>>> 99
>>>>
>>>> 4
>>>>
>>>> datetime.datetime(2011, 12, 14, 14, 46, 14)
>>>>
>>>> stable
>>>>
>>>> *is_https*
>>>>
>>>> :
>>>>
>>>> False
>>>>
>>>> *is_local*
>>>>
>>>> :
>>>>
>>>> True
>>>>
>>>> *is_restful*
>>>>
>>>> :
>>>>
>>>> False
>>>>
>>>> *now*
>>>>
>>>> :
>>>>
>>>> datetime.datetime(2012, 10, 23, 23, 37, 12, 447022)
>>>>
>>>> *post_vars*
>>>>
>>>> :
>>>>
>>>>
>>>> *url*
>>>>
>>>> :
>>>>
>>>> /Json/default/ricevo
>>>>
>>>> *utcnow*
>>>>
>>>> :
>>>>
>>>> datetime.datetime(2012, 10, 23, 21, 37, 12, 447035)
>>>>
>>>> *uuid*
>>>>
>>>> :
>>>>
>>>> Json/127.0.0.1.2012-10-23.23-37-12.35f491ef-469f-421f-93e9-0cebff13da2f
>>>>
>>>> *vars*
>>>>
>>>> :
>>>>
>>>>
>>>> *wsgi*
>>>>
>>>> :
>>>>
>>>> *environ*
>>>>
>>>> :
>>>>
>>>> *CONTENT_LENGTH*
>>>>
>>>> :
>>>>
>>>> 36
>>>>
>>>> *CONTENT_TYPE*
>>>>
>>>> :
>>>>
>>>> application/json; charset=utf-8
>>>>
>>>> *HTTP_ACCEPT*
>>>>
>>>> :
>>>>
>>>> */*
>>>>
>>>> *HTTP_ACCEPT_ENCODING*
>>>>
>>>> :
>>>>
>>>> gzip
>>>>
>>>> *HTTP_ACCEPT_LANGUAGE*
>>>>
>>>> :
>>>>
>>>> en, fr, de, ja, nl, it, es, pt, pt-PT, da, fi, nb, sv, ko, zh-Hans,
>>>> zh-Hant, ru, pl, tr, uk, ar, hr, cs, el, he, ro, sk, th, id, ms, en-GB,
>>>> ca,
>>>> hu, vi, en-us;q=0.8
>>>>
>>>> *HTTP_CONNECTION*
>>>>
>>>> :
>>>>
>>>> keep-alive
>>>>
>>>> *HTTP_CONTENT_LENGTH*
>>>>
>>>> :
>>>>
>>>> 36
>>>>
>>>> *HTTP_CONTENT_TYPE*
>>>>
>>>> :
>>>>
>>>> application/json; charset=utf-8
>>>>
>>>> *HTTP_HOST*
>>>>
>>>> :
>>>>
>>>> 127.0.0.1:8000
>>>>
>>>> *HTTP_USER_AGENT*
>>>>
>>>> :
>>>>
>>>> mirko.json/1.0 (unknown, iPhone OS 6.0, iPhone Simulator,
>>>> Scale/1.000000)
>>>>
>>>> *PATH_INFO*
>>>>
>>>> :
>>>>
>>>> /Json/default/ricevo
>>>>
>>>> *QUERY_STRING*
>>>>
>>>> :
>>>>
>>>>
>>>> *REMOTE_ADDR*
>>>>
>>>> :
>>>>
>>>> 127.0.0.1
>>>>
>>>> *REMOTE_PORT*
>>>>
>>>> :
>>>>
>>>> 60150
>>>>
>>>> *REQUEST_METHOD*
>>>>
>>>> :
>>>>
>>>> POST
>>>>
>>>> *SCRIPT_NAME*
>>>>
>>>> :
>>>>
>>>>
>>>> *SERVER_NAME*
>>>>
>>>> :
>>>>
>>>> marcos-……
>>>>
>>>> *SERVER_PORT*
>>>>
>>>> :
>>>>
>>>> 8000
>>>>
>>>> *SERVER_PROTOCOL*
>>>>
>>>> :
>>>>
>>>> HTTP/1.1
>>>>
>>>> *SERVER_SOFTWARE*
>>>>
>>>> :
>>>>
>>>> Rocket 1.2.4
>>>>
>>>> *wsgi.errors*
>>>>
>>>> :
>>>>
>>>> <open file '<stderr>', mode 'w' at 0x10f7b2270>
>>>>
>>>> *wsgi.file_wrapper*
>>>>
>>>> :
>>>>
>>>> <class wsgiref.util.FileWrapper at 0x1103c1328>
>>>>
>>>> *wsgi.input*
>>>>
>>>> :
>>>>
>>>> <open file '<fdopen>', mode 'w+b' at 0x11c143c00>
>>>>
>>>> *wsgi.multiprocess*
>>>>
>>>> :
>>>>
>>>> False
>>>>
>>>> *wsgi.multithread*
>>>>
>>>> :
>>>>
>>>> True
>>>>
>>>> *wsgi.run_once*
>>>>
>>>> :
>>>>
>>>> False
>>>>
>>>> *wsgi.url_scheme*
>>>>
>>>> :
>>>>
>>>> http
>>>>
>>>> *wsgi.version*
>>>>
>>>> :
>>>>
>>>> 1
>>>>
>>>> IN FILE:
>>>> /USERS/MARCOMchurch/SITES/WEB2PY/APPLICATIONS/JSON/CONTROLLERS/DEFAULT.PY
>>>>
>>>> 1.
>>>>
>>>> 2.
>>>>
>>>> 3.
>>>>
>>>> 4.
>>>>
>>>> 5.
>>>>
>>>> 6.
>>>>
>>>> 7.
>>>>
>>>> 8.
>>>>
>>>> 9.
>>>>
>>>> 10.
>>>>
>>>> 11.
>>>>
>>>> 12.
>>>>
>>>> 13.
>>>>
>>>> 14.
>>>>
>>>> 15.
>>>>
>>>> 16.
>>>>
>>>> 17.
>>>>
>>>> 18.
>>>>
>>>>
>>>> *# -*- coding: utf-8 -*-*
>>>>
>>>> *# this file is released under public domain and you can use without
>>>> limitations*
>>>>
>>>> **
>>>>
>>>> *
>>>> #########################################################################
>>>> *
>>>>
>>>> *## This is a samples controller*
>>>>
>>>> *## - index is the default action of any application*
>>>>
>>>> *## - user is required for authentication and authorization*
>>>>
>>>> *## - download is for downloading files uploaded in the db (does
>>>> streaming)*
>>>>
>>>> *## - call exposes all registered services (none by default)*
>>>>
>>>> *
>>>> #########################################################################
>>>> *
>>>>
>>>> *……*
>>>>
>>>> *def *ricevo*():*
>>>>
>>>> * **from *json *import *loads*, *dumps
>>>>
>>>> data *=
>>>> *loads*(*request<http://127.0.0.1:8000/examples/global/vars/request>
>>>> *.*vars*)*
>>>>
>>>> * **print *data
>>>>
>>>> *print *request<http://127.0.0.1:8000/examples/global/vars/request>
>>>> *.*vars*.*body*.*read*()*
>>>>
>>>> * **print *request<http://127.0.0.1:8000/examples/global/vars/request>
>>>> *.*vars
>>>>
>>>> *return *dumps*(*data*)*
>>>>
>>>
>>> Il giorno martedì 23 ottobre 2012 17:55:34 UTC+2, Niphlod ha scritto:
>>>>
>>>> almost dinner time here.... :P
>>>>
>>>> On Tuesday, October 23, 2012 5:44:45 PM UTC+2, Mchurch wrote:
>>>>>
>>>>> I'll try, thanks.
>>>>> Ps. Did You eat some snakes for breakfast?....
>>>>> :)
>>>>
>>>>
--
---
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.