首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Web2py:通过Web2py调度器中的Rest调用发送JSON数据

Web2py:通过Web2py调度器中的Rest调用发送JSON数据
EN

Stack Overflow用户
提问于 2018-06-08 11:22:59
回答 1查看 1.1K关注 0票数 0

我有一个表单,其中一个字段是IS_JSON类型

代码语言:javascript
复制
db.define_table('vmPowerOpsTable',
                Field('launchId',label=T('Launch ID'),default =datetime.datetime.now().strftime("%d%m%y%H%M%S")),
                Field('launchDate',label=T('Launched On'),default=datetime.datetime.now()),
                Field('launchBy',label=T('Launched By'),default = auth.user.email if auth.user else "Anonymous"),
                Field('inputJson','text',label=T('Input JSON*'),
                      requires = [IS_NOT_EMPTY(error_message='Input JSON is required'),IS_JSON(error_message='Invalid JSON')]),
                migrate=True)

当用户提交此表单时,此数据也同时插入到另一个表中。

代码语言:javascript
复制
db.opStatus.insert(launchId=vmops_launchid,launchDate=vmops_launchdate
                               ,launchBy=vmops_launchBy,opsType=operation_type,
                               opsData=vmops_inputJson,
                               statusDetail="Pending")
db.commit()

现在,从调度程序中,我试图检索这些数据并发出POST请求。

代码语言:javascript
复制
vm_power_opStatus_row_data = vm_power_opStatus_row.opsData

注意,在上面的步骤中,我能够检索数据。(我将其插入DB中,并看到该字段与用户输入的内容完全匹配。

然后从调度程序中,我写了一篇文章。

代码语言:javascript
复制
power_response = requests.post(vm_power_op_url, json=vm_power_opStatus_row_data)

POST请求由我的控制器中的一个函数处理。

控制器功能:

代码语言:javascript
复制
@request.restful()
def vmPowerOperation():
    response.view = 'generic.json'
    si = None
    def POST(*args, **vars):
        jsonBody = request.vars
        print "Debug 1"+ str(jsonBody) ##-> Here it returns blank in jsonBody.

但是,如果我从外部执行相同的请求(POSTMAN、客户端甚至python请求),我就会得到想要的结果。

当我试图从表中获取数据类型时,数据类型有什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-08 14:15:03

power_response = requests.post(vm_power_op_url,json=vm_power_opStatus_row_data)

看来vm_power_opStatus_row_data已经是一个JSON编码的字符串了。但是,json参数应该是requests.post()对象,而不是字符串(requests将自动将Python对象编码为JSON并适当地设置内容类型)。因此,上述各点应是:

代码语言:javascript
复制
power_response = requests.post(vm_power_op_url,
                               json=json.loads(vm_power_opStatus_row_data))

或者,您可以使用data参数并将内容类型设置为JSON:

代码语言:javascript
复制
power_response = requests.post(vm_power_op_url,
                               data=vm_power_opStatus_row_data,
                               headers={'Content-Type': 'application/json')

另外,请注意,在REST函数中,request.vars已经作为**vars传递给函数,因此在函数中,您可以简单地引用vars而不是request.vars

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50759577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档