繁体   English   中英

是什么在此 python 代码(谷歌应用引擎)中产生了“405 Method Not Allowed”?

[英]What is producing “405 Method Not Allowed” in this python code (google app engine)?

我是一个 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)

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

最后发现根本原因是INDENTION

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

代码是正确的,工作正常。 您需要在别处寻找此 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)

编辑(谢谢,@Nick Johnson)

如果上述方法均无效,请考虑从头开始并检查您的 GAE 设置。

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

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

def post(self):

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

我在 Notepad++ 上遇到了同样的问题。 我在 Python IDLE 中唯一改变的就是用制表符替换了一些空格,并且效果很好:)

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

我的代码遇到了同样的问题,当我重新排列处理程序的顺序时,这个问题得到了解决。 经历了几个不同的 SO 答案,检查处理程序定义、缩进中的错误,最后在查看处理程序的顺序时修复它。

就我而言,当我尝试拨打电话时:我收到了 405 不允许的方法

@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'])

然后它对我有用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM