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 メソッドの内部メソッドにしたのは間違ったインデントであることを示しました。うまく処理されました。

于 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)

編集(ありがとう、@Nick Johnson)

上記のいずれもうまくいかない場合は、最初からやり直すことを検討し、GAE の設定を確認してください。

  1. モジュールapp.yamlと一緒に有効なファイルがありますか?main.py
  2. 標準の Google AppEngine インストールでゲストブック デモ アプリを実行できますか?
  3. そうでない場合は、エラーメッセージがある場合は、それを実行しているシステムの詳細とともに投稿してください。
  4. ゲストブックを実行できる場合は、それを編集してアプリケーションを再構築できますか? 過去にこれがうまくいったことがわかりました。
于 2012-04-27T17:11:23.340 に答える
2

同じ問題がありました。問題は再びインデントでした。定義時:

def post(self):

インデントに「タブ」を使用すると、機能しませんでした。スペースを使用したときはそうでした。エラーログには何も表示されませんでした。このような問題を回避するには、Wing IDE などの Python IDE を使用できます。

于 2013-03-30T07:49:11.873 に答える
1

Notepad ++でも同じ問題が発生しました。私が Python IDLE で変更した唯一のことは、いくつかのスペースをタブに置き換えることでした。それはうまくいきました:)

于 2014-07-22T13:54:27.357 に答える
0

ハンドラーの順序を並べ替えたときに修正されたコードに同じ問題がありました。ハンドラー定義、インデントのエラーをチェックするいくつかの異なる SO 回答を調べ、最終的にハンドラーの順序を見て修正しました。

于 2015-07-30T00:31:27.703 に答える
0

私の場合、ポストコールをしようとしているとき: 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'])

そして、それは私のために働きます

于 2020-03-12T06:01:57.770 に答える