龙卷风 Post 未找到方法
Tornado Post Method Not Found
我正在尝试 post Tornado 网络服务器中的一个表单,但每当我单击提交时都会生成以下错误
405 Method Not Allowed
这是表格
<form method="post">
First name: <input type="text" name="fname"><br>
Last name: <input type="text" name="lname"><br>
<input type="submit" value="Submit">
</form>
我试过将主请求处理程序上的 "get" 方法更改为 "post" 但它不起作用。唯一有效的方法是 GET,
class MainHandler(BaseHandler):
"""
Main request handler for the root path and for chat rooms.
"""
@tornado.web.asynchronous
def get(self, room=None):
有什么建议吗?
唯一有效的方法是 GET
,因为您在处理程序子类上定义的唯一方法是 get()
。要处理 POST
,定义一个 post()
方法来代替(或补充)get()
.
我下载了示例项目并 运行 自己下载了。我想我已经取得了一些进步。
首先,原来的 MainHandler 无法处理 POST 请求。根据代码,它处理像/room/1
、/room/2
这样的请求。
其次,我认为您正在尝试模仿登录表单。但是登录表单使用 GET 方法和 /login
作为端点:
<form class="form-inline" action="/login" method="get">
我猜你也把你的表格放在index.html,它的URL实际上是/login
(如果没有登录)或/room/X
(登录)。所以您可能正在点击 LoginHandler。
第三,当我在 MainHandler 中添加一个 post 方法并向 /room/1
发送一个 POST 请求时, 它实际上正在工作 并触发500 内部错误。
我用curl测试了几个案例。如果您尝试在 /
上向 MainHandler 发送 POST 请求,它甚至没有响应!因为前面说过,get定义为get(self, room=None)。它只接受 /room/X
.
如果您在 /room
或 /login
上尝试,响应将是 405 Method Not Allowed
。
如果您希望 POST 可用于 /login
,最简单的方法是像这样在 LoginHandler 中添加 POST:
@tornado.web.asynchronous
def post(self):
self.get()
# or this
post = get
经过长时间的 window 聊天,我认为最适合您的方法是通过 cookie 传输数据。
这里有教程:http://www.w3schools.com/js/js_cookies.asp
另一种资源是将您的数据分解成多个部分。
一种方法是向分配给您唯一 ID 的端点发出请求。然后以 ?id=XXX&page=1&data=...
形式发送一系列请求,然后用 ?id=XXX&total_pages=27
关闭它,此时您 assemble 服务器上的不同部分。
我正在尝试 post Tornado 网络服务器中的一个表单,但每当我单击提交时都会生成以下错误
405 Method Not Allowed
这是表格
<form method="post">
First name: <input type="text" name="fname"><br>
Last name: <input type="text" name="lname"><br>
<input type="submit" value="Submit">
</form>
我试过将主请求处理程序上的 "get" 方法更改为 "post" 但它不起作用。唯一有效的方法是 GET,
class MainHandler(BaseHandler):
"""
Main request handler for the root path and for chat rooms.
"""
@tornado.web.asynchronous
def get(self, room=None):
有什么建议吗?
唯一有效的方法是 GET
,因为您在处理程序子类上定义的唯一方法是 get()
。要处理 POST
,定义一个 post()
方法来代替(或补充)get()
.
我下载了示例项目并 运行 自己下载了。我想我已经取得了一些进步。
首先,原来的 MainHandler 无法处理 POST 请求。根据代码,它处理像/room/1
、/room/2
这样的请求。
其次,我认为您正在尝试模仿登录表单。但是登录表单使用 GET 方法和 /login
作为端点:
<form class="form-inline" action="/login" method="get">
我猜你也把你的表格放在index.html,它的URL实际上是/login
(如果没有登录)或/room/X
(登录)。所以您可能正在点击 LoginHandler。
第三,当我在 MainHandler 中添加一个 post 方法并向 /room/1
发送一个 POST 请求时, 它实际上正在工作 并触发500 内部错误。
我用curl测试了几个案例。如果您尝试在 /
上向 MainHandler 发送 POST 请求,它甚至没有响应!因为前面说过,get定义为get(self, room=None)。它只接受 /room/X
.
如果您在 /room
或 /login
上尝试,响应将是 405 Method Not Allowed
。
如果您希望 POST 可用于 /login
,最简单的方法是像这样在 LoginHandler 中添加 POST:
@tornado.web.asynchronous
def post(self):
self.get()
# or this
post = get
经过长时间的 window 聊天,我认为最适合您的方法是通过 cookie 传输数据。
这里有教程:http://www.w3schools.com/js/js_cookies.asp
另一种资源是将您的数据分解成多个部分。
一种方法是向分配给您唯一 ID 的端点发出请求。然后以 ?id=XXX&page=1&data=...
形式发送一系列请求,然后用 ?id=XXX&total_pages=27
关闭它,此时您 assemble 服务器上的不同部分。