在这个python代码(google app engine)中产生“405 Method Not Allowed”是什么?

2024-04-29 14:58:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个python新手,我正在尝试一步一步地构建一个应用程序复制,这是我之前在课堂上教过的,但是我得到了“405 Method Not Allowed”错误。

教授所做的是: enter image description here

我所做的是:

enter image description here

有人能告诉我在下面的代码中什么是导致这个错误“405方法不允许”的原因吗?我看不出我所做的和教授所教的有什么不同。 缩进也可以(这里是main.py文件https://docs.google.com/open?id=0B8TXLR_e14aCVDFfdlpYSU9DNDg)。

提前感谢您的帮助!

这里是我的代码:

form= """
  <html>
  <head>
    <title>Unit 2 Rot 13</title>
  </head>

  <body>
    <h2>Enter some text to ROT13:</h2>
    <form method="post" action="/rot13">
      <textarea name="text"
                style="height: 100px; width: 400px;"></textarea>
      <br>
      <input type="submit">
    </form>
  </body>

  </html> """

class MainHandler(webapp2.RequestHandler):
    def get(self):
        self.response.out.write(form)

class Rot13Handler(webapp2.RequestHandler):
    def post(self):
        text = self.request.get("text")
        self.response.out.write(text)

app = webapp2.WSGIApplication([('/', MainHandler), ('/rot13', Rot13Handler)],
                          debug=True)

Tags: 代码textselfformtitlehtml错误body
3条回答

代码正确,工作正常。您需要在其他地方查找405错误的解释。

编辑

你公布了你的实际代码了吗?单击“提交”时,下面的代码将为您提供405方法不允许的错误。它有一个微妙的错误。。。:)

import webapp2

form= """
  <html>
  <head>
    <title>Unit 2 Rot 13</title>
  </head>

  <body>
    <h2>Enter some text to ROT13:</h2>
    <form method="post" action="/rot13">
      <textarea name="text"
                style="height: 100px; width: 400px;"></textarea>
      <br>
      <input type="submit">
    </form>
  </body>

  </html> """

class MainHandler(webapp2.RequestHandler):
    def get(self):
        self.response.out.write(form)

class Rot13Handler(webapp2.RequestHandler):
    # Error here: mistyped get instead of post :)
    def get(self):
        text = self.request.get("text")
        self.response.out.write(text)


app = webapp2.WSGIApplication([('/', MainHandler),
                               ('/rot13', Rot13Handler)],
                              debug=True)

如果您的路由输入不正确,也会发生同样的情况,如:

app = webapp2.WSGIApplication([('/', MainHandler),
                               ('/rot13', MainHandler)],
                              debug=True)

编辑(谢谢,@Nick Johnson)

如果以上都不起作用,考虑从头开始,检查您的GAE设置。

  1. main.py模块旁边是否有有效的app.yaml文件?
  2. 你能在标准的Google AppEngine安装中运行留言簿演示应用程序吗?
  3. 如果没有,则发布错误消息(如果有),以及运行该错误消息的系统的详细信息。
  4. 如果你能运行留言簿,你能试着通过编辑它来重建你的应用程序吗?我发现这在过去对我有效。

我只是按照Udacity的在线课程尝试Python,遇到了类似的问题,AppEngine找不到post方法。

最后发现根本原因是缩进。

我用Notepad++作为这个小项目的编辑器,但是它不能工作,继续抛出405错误。然后,我将代码复制粘贴到安装了Python插件的Netbean IDE中,IDE显示它的缩进错误,使POST方法成为GET方法的内部方法,虽然看起来缩进处理得很好,但在Notepad++中找不到。

也有同样的问题。问题又是缩进。定义时:

def post(self):

如果我用“tab”缩进,它就不起作用了。当我使用空间的时候。错误日志没有显示任何内容。为了避免这样的问题,可以使用python IDE,比如Wing IDE。

相关问题 更多 >