Found the answer here:

https://stackoverflow.com/questions/37806801/can-not-post-data-via-ajax-to-web2py-rest-api-possible-cors-issue

def api():
 *from gluon.serializers import json*
 response.view = 'generic.'+request.extension
 def GET(*args,**vars):
      patterns = 'auto'
      parser = db.parse_as_rest(patterns,args,vars)
      if parser.status == 200:
         return dict(content=parser.response)
      else:
         raise HTTP(parser.status,parser.error)
 def POST(table_name,**vars):
     #return db[table_name].validate_and_insert(**vars)
     #data = gluon.contrib.simplejson.loads(request.body.read())
     *return json(db[table_name].validate_and_insert(**vars))*
     return dict()
 def PUT(table_name,record_id,**vars):
     return db(db[table_name]._id==record_id).update(**vars)
 def DELETE(table_name,record_id):
     return db(db[table_name]._id==record_id).delete()
 def OPTIONS(*args,**vars):
     print "OPTION called"
     return True
 return dict(GET=GET,POST=POST,PUT=PUT,DELETE=DELETE,OPTIONS=OPTIONS)

On Tuesday, 18 February 2020 11:47:22 UTC-8, Kevin Keller wrote:
>
> I didnt know I need to post the data as form data. 
>
> Now it works. 
>
> How I can post a JSON payload instead and use that payload for 
> insert_and_validate? 
>
> I tried this:
>
> def POST(table_name,**vars):
>         import json
>         data=json.loads(request.body.read())
>         data=json.dumps(data)
>         return dict(db[table_name].validate_and_insert(data))
>
> On Tuesday, 18 February 2020 11:02:20 UTC-8, Kevin Keller wrote:
>>
>> Even when  I manually try to convert the post data I get the error:
>>
>> def POST(table_name,**vars):
>>         restdata=request.vars
>>         
>>         return 
>> dict(db[table_name].validate_and_insert(restdata.decode("utf-8")))
>>     
>>
>> On Tuesday, 18 February 2020 10:01:14 UTC-8, Kevin Keller wrote:
>>>
>>> When creating a simple rest api with web2py:
>>>
>>> @request.restful()
>>> def api():
>>>     
>>>     def GET(*args, **vars):
>>>         parser=db.parse_as_rest('auto',args,vars)
>>>         return dict(content=parser.response)
>>>     
>>>     def POST(table_name,**vars):
>>>         return dict(db[table_name].validate_and_insert(**vars))
>>>     
>>>     return locals()
>>>
>>> I can get access via rest api to any table but auth_users.
>>>
>>> Is there a way I can enable this? 
>>>
>>> I would like to provision new users via rest api to my web2py app. 
>>>
>>> Authentication is done via external IDP via OIDC. 
>>>
>>> So I basically just need the firstname, lastname and email to be 
>>> provisioned via rest. 
>>>
>>> Authentication to provision is at the moment an after thought. 
>>>
>>> I just need to get this working asap. 
>>>
>>> Thank you!
>>>
>>>
>>>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
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 web2py+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/web2py/9dca454e-fdc6-47b2-aecb-10b7073b2467%40googlegroups.com.

Reply via email to