3

我是一个 python 新手,我正在尝试构建一个应用程序,逐步复制我在课堂上早先教授的内容,但是我收到“405 Method Not Allowed”错误。

这是教授所做的: 在此处输入图像描述

这是我所做的:

在此处输入图像描述

有人可以指出我下面代码中出现此错误“405 Method Not Allowed”的原因吗?我看不出我所做的和教授教的有什么区别。缩进也可以(这里是 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)
4

7 回答 7

9

我只是在 Udacity 的在线课程之后尝试 Python 并遇到了 AppEngine 无法找到 post 方法的类似问题。

最后事实证明,根本原因是INDENTION

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

于 2012-11-17T01:10:53.023 回答
4

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

编辑

您是否发布了实际代码?当您单击提交时,下面的代码将为您提供 405 Method not Allowed 错误。它有一个微妙的错误...... :)

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)

编辑(谢谢,@尼克约翰逊)

如果上述方法都不起作用,请考虑从头开始并检查您的 GAE 设置。

  1. app.yaml模块旁边是否有有效文件main.py
  2. 您能否在标准的 Google AppEngine 安装中运行留言簿演示应用程序?
  3. 如果没有,请发布错误消息(如果有)以及运行它的系统的详细信息。
  4. 如果您能够运行留言簿,您是否可以尝试通过编辑该留言簿来重建您的应用程序?我发现这在过去对我有用。
于 2012-04-27T17:11:23.340 回答
2

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

def post(self):

如果我使用“制表符”进行缩进,则它不起作用。当我使用空格时,它确实如此。错误日志什么也没显示。为避免此类问题,您可以使用 python IDE,例如 Wing IDE。

于 2013-03-30T07:49:11.873 回答
1

我对 Notepad++ 也有同样的问题。我用 Python IDLE 改变的唯一一件事是用制表符替换一些空格,它工作正常:)

于 2014-07-22T13:54:27.357 回答
0

使用 Notepad++ 遇到同样的问题。在我读到这篇文章之前,我花了几天的时间才弄清楚出了什么问题。切换到使用 Python IDLE。奇迹般有效。我会回应@Aris 并说使用“传统”Python IDE 是最好的方法。

于 2013-10-18T09:27:14.153 回答
0

我的代码遇到了同样的问题,当我重新排列处理程序的顺序时,该问题已修复。通过几个不同的 SO 答案检查处理程序定义中的错误,缩进并最终将其修复为查看处理程序的顺序。

于 2015-07-30T00:31:27.703 回答
0

就我而言,当我尝试拨打电话时:我收到 405 Method not allowed

@app.route("/test")
def test():
    print('inside test')
    if request.method == 'POST':
    # some code
    res = json.dumps({ 'success': True, 'message': db_res }), 200, headers
    return res

我错过的地方:

方法=['POST']

@app.route("/test" , methods=['POST'])

然后它对我有用

于 2020-03-12T06:01:57.770 回答