10

出于某种原因,我无法在龙卷风中使用 POST 方法。

当我将 GET 更改为 POST 时,即使该hello_world示例也不起作用。

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def post(self):
        self.write("Hello, world")

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

if __name__ == "__main__":
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

它抛出“405 方法不允许”。有什么建议么?

4

4 回答 4

9

get如果您想访问该页面,您仍然需要,因为使用浏览器请求和GET方法访问该页面。

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def post(self):
        self.write("Hello, world")
    get = post # <--------------

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

if __name__ == "__main__":
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()
于 2013-09-25T13:53:05.270 回答
4

Falsetru 答案是一个有用的提示,是的,您需要的正是一个 get 方法。但是不,我认为 get 和 post 方法的行为不应该相同。两种方法的语义不同。请查看 HTTP 规范http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html并考虑 Brabster 对这个问题的回答HTTP-Get 和 HTTP-POST 之间有什么区别,为什么是HTTP-POST 在安全性方面较弱

(对不起,我的句子应该是对虚假答案的评论更好,但我的名声不允许)

于 2014-01-27T09:01:28.550 回答
1

最近,我遇到了同样的问题。以下代码是我的解决方案:

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def set_default_headers(self):
    print('set headers!!')
    self.set_header('Access-Control-Allow-Origin', '*')
    self.set_header('Access-Control-Allow-Headers', '*')
    self.set_header('Access-Control-Max-Age', 1000)
    self.set_header('Content-type', 'application/json')
    self.set_header('Access-Control-Allow-Methods', 'POST, GET, OPTIONS')
    self.set_header('Access-Control-Allow-Headers',
                    'Content-Type, Access-Control-Allow-Origin, Access-Control-Allow-Headers, X-Requested-By, Access-Control-Allow-Methods')


def OPTIONS(self):
    pass

def post(self):
    self.write("Hello, world")

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

if __name__ == "__main__":`enter code here`
 application.listen(8888)
 tornado.ioloop.IOLoop.instance().start()
于 2018-06-11T09:10:16.707 回答
0

在此处输入图像描述您在问题中提供的示例代码确实有效。例如,请确保使用 Curl 或 Postman 发送 POST 而不是 GET。如果您将网络浏览器指向该 URL,它将尝试 GET,但您尚未定义。

您可能不想为 URL 定义 GET。拥有一个仅限 POST 的 URL 是完全合法的,Tornado 当然允许你这样做。POST url 可能是从许多其他位置加载的表单的常见提交点。

于 2015-04-20T18:31:25.360 回答