出于某种原因,我无法在龙卷风中使用 POST 方法。 当我将 GET 更改为 POST 时,即使hello_world示例也不起作用。 它抛出“405 方法不允许”。 有什么建议吗? ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我正试图在Tornado Web服务器上发布一个表单,但每当我点击提交时生成以下错误
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
。
如果你想为/login
提供POST,最简单的方法是在LoginHandler中添加POST,如下所示:
@tornado.web.asynchronous
def post(self):
self.get()
# or this
post = get
在那个漫长的聊天窗口之后,我认为最好的方法是通过cookie传输数据。
这是一个教程: http : //www.w3schools.com/js/js_cookies.asp
另一种资源是将您的数据分解为多个部分。
一种方法是向端点发出请求,为您分配唯一ID。 然后以以下形式发送一系列请求: ?id=XXX&page=1&data=...
在关闭之前使用?id=XXX&total_pages=27
,此时您将在服务器上组装不同的部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.