小编use*_*445的帖子

如何在Tornado中使用POST方法?

我正在尝试使用Tornado启动服务器并向其发布字符串.我已经找到了很多关于如何在处理程序类中编写post方法的示例,但没有关于如何编写post请求的示例.我当前的代码确实导致post方法执行,但get_argument没有获取数据 - 它只是每次都打印默认的"No data received".我究竟做错了什么?

我的代码看起来像这样:

class MainHandler(tornado.web.RequestHandler):
    def post(self):
        data = self.get_argument('body', 'No data received')
        self.write(data)

application = tornado.web.Application([
    (r"/", MainHandler),
])

if __name__ == "__main__":

    def handle_request(response):
        if response.error:
            print "Error:", response.error
        else:
            print response.body
        tornado.ioloop.IOLoop.instance().stop()

    application.listen(8888)    
    test = "test data"
    http_client = tornado.httpclient.AsyncHTTPClient()
    http_client.fetch("http://0.0.0.0:8888", handle_request, method='POST', headers=None, body=test)
    tornado.ioloop.IOLoop.instance().start()
Run Code Online (Sandbox Code Playgroud)

将我要发送的字符串放在"body"参数中是正确的做法吗?在我看到的一些例子中,就像这里一样,人们似乎创建了自己的参数,但是如果我尝试在请求中添加新参数,就像

http_client.fetch("http://0.0.0.0:8888", handle_request, method='POST', headers=None, data=test)
Run Code Online (Sandbox Code Playgroud)

我只是得到一个错误,说"TypeError:init()得到一个意外的关键字参数'data'"

谢谢!

python post tornado

19
推荐指数
1
解决办法
4万
查看次数

基于串行数据动态更新Tkinter窗口

我正在尝试编写一个从串行端口连接获取数据的程序,并根据该数据实时自动更新Tkinter窗口.

我试图为窗口创建一个单独的线程,定期从主线程获取当前数据并更新窗口,如下所示:

serialdata = []
data = True

class SensorThread(threading.Thread):
    def run(self):
        serial = serial.Serial('dev/tty.usbmodem1d11', 9600)
        try:
            while True:
                serialdata.append(serial.readline())
        except KeyboardInterrupt:
            serial.close()
            exit()

class GuiThread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.root = Tk()
        self.lbl = Label(self.root, text="")

    def run(self):
        self.lbl(pack)
        self.lbl.after(1000, self.updateGUI)
        self.root.mainloop()

    def updateGUI(self):
        msg = "Data is True" if data else "Data is False"
        self.lbl["text"] = msg
        self.root.update()
        self.lbl.after(1000, self.updateGUI)

if __name == "__main__":
    SensorThread().start()
    GuiThread().start()

    try:
        while True:
            # A bunch of analysis that sets either data = …
Run Code Online (Sandbox Code Playgroud)

python tkinter

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

python ×2

post ×1

tkinter ×1

tornado ×1