【发布时间】:2019-05-09 13:30:51
【问题描述】:
我正在尝试使用 tornado 做一个简单的 get 和 post 方法。龙卷风框架相当新。对于我想以 json 作为输入的帖子,使用该输入输入另一个函数,我必须执行另一部分代码。但是,即使使用简单的 self.write(),我也无法使用 tornado post 方法。
对于我的 get 方法,我从 SQL 数据库中读取以获取传感器的状态并以 json 格式写入。 get 方法完美运行!当我转到 localhost:port# 时,它会读出我的 get json 文件。对于我的 post 方法,我想接受一个只有一个 key:value 的简单 json,它是一个浮点数。我想获取用户在 json 中指定的浮点数,并在我的 flowMKS.set() 函数中使用它,该函数将更改传感器的设定点参数。我不确定如何将 json 输入 post 方法并将其读入变量。我在下面有一些#commented 代码,我尝试过但没有用。然而,我回到了基础,只是做了一个 self.write("Hello World") 来查看帖子是否有效。我也无法让 self.write 工作。当我转到 localhost:port#/flow_post 时,不断收到 500 错误消息。我的 get 方法中使用了变量 flow_status。
预期的结果是将 json {"setpoint":45.5} 纳入 post 方法。使用该数字并插入到我的 flowMKS 方法中以更改传感器上的参数。
如何将 json 输入到 post 方法并从 json 输入中获取数字并存储在变量中?
class Current(tornado.web.RequestHandler):
def get(self):
global flow_status
time = flow_status[0]
ip = flow_status[1]
rate = flow_status[2]
setp = flow_status[3]
tempc = flow_status[4]
status = {"flow_controller":{
"time":time,
"ip":ip,
"rate_sccm":rate,
"setpoint":setp,
"temperature_c":tempc,
}
}
self.write(status)
class Update(tornado.web.RequestHandler):
# def prepare(self):
# if self.request.haders["Content-Type"].startswith("application/json"):
# self.json_args = json.loads(self.request.body)
# else:
# self.json_args = None
def post(self):
# #expecting body data to contain JSON so we use json.loads to decrypt the JSON into a dict
# data = json.loads(self.request.body)
#
# #Getting what the setpoint should be
# setpoint = self.json_args["setpoint"]
#
# #making the input a float
# setpoint = float(setpoint)
#
# #setting up connection with sensor
# flowMKS = FlowController(flow_status[1])
#
# #sending setpoint to sensor
# flowMKS.set(setpoint)
self.write("Hello World")
if __name__ == '__main__':
# global flow_status
#Below is creating the Tornado based API for get and post methods
tornado.options.parse_command_line()
app = tornado.web.Application(
handlers=[(r'/',Current), (r'/flow_post', Update)])
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
#using PeriodicCallback to get info from the SQL database every 500 ms
PeriodicCallback(get_sql_status,500).start()
#starting the entire Tornado IOLoop
tornado.ioloop.IOLoop.current().start()
【问题讨论】:
-
所以你想将 JSON 发布到你的 post 方法?
-
是的。我想接收一个 JSON 文件,解析它以获取值,然后使用该值输入到我拥有的另一个函数中。我对龙卷风框架很陌生。
-
JSON 文件还是只是 JSON 对象?
-
一个 JSON 对象就可以了。真的是哪个更容易实现。