2012-04-27 2 views
3

私はPythonの初心者です。クラスの初期段階で教えられていた手順をコピーしてアプリを構築しようとしていますが、「405 Method Not Allowed」エラーが発生しています。教授が何をしたか。こここのPythonコード(google appエンジン)で "405 Method Not Allowed"を生成していますか?

enter image description here

私がやったここで何を:

enter image description here

は、誰かが下記のコードで許可されていません。このエラー「405メソッドの原因が何であるか私をポイントでした"?私がやったことと教授が教えたこととの違いは分かりません。 インデントもOKです(ここには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) 
+1

'webapp2.WSGIApplication(( ''/rot13 '、Rot13Handler)、(('/'、MainHandler)))' – vartec

+0

このコードは正常に動作します。私はちょうどそれを貼り付けコピーし、正しい結果を得た。 – aschmid00

+0

@ IgnacioVazquez-Abramsいいえそんなものはありません。ポスト関数を定義した場合は有効になり、そうでない場合は許可されません。 – aschmid00

答えて

4

コードが正しいと正常に動作します。この405エラーの説明は、別の場所で探す必要があります。

EDIT

はあなたの実際のコードを掲載していますか?次のコードは、submitをクリックすると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) 

EDIT(おかげで、@Nickジョンソン)

上記のいずれにも該当しない場合は、最初から開始して、GAEの設定を確認してください。

  1. 有効なapp.yamlファイルがmain.pyモジュールの横にありますか?
  2. 標準のGoogle AppEngineインストールでゲストブックデモアプリケーションを実行できますか?
  3. もしそうでない場合は、エラーメッセージがあれば、それを実行しているシステムの詳細も投稿してください。
  4. ゲストブックを実行できる場合は、編集してアプリケーションを再構築できますか?私はこれが過去に私のために働いていることを発見しました。
+0

@gaudenご注意いただきありがとうございます。はい、それは私の実際のコードですが、私はあなたの助言に従い、結果を投稿します。 – craftApprentice

+1

あなたの最初の提案のどれも、405. –

+0

+1とは何の関係もありません。システムの再確認はシステムのデバッグや初期学習に役立ちますが、具体的なエラーメッセージのためではありません。ありがとう。 – gauden

9

私はただUdacityのオンラインコースに続いてPythonを試していて、AppEngineがpostメソッドを見つけることができないという同様の問題に直面しています。

最後に、根本的な原因がINDENTIONであることが判明しました。

小規模なプロジェクトのエディタとしてNotepad ++を使用しましたが、それは動作しません。405エラーを投げかけます。コードをコピーしてPythonプラグインをインストールしたNetbean IDEに貼り付けると、POSTメソッドがGETメソッドの内部メソッドになっていたことが間違っていたことがIDEから分かりましたが、これはNotepad ++では見付かりませんでしたよく扱いました。

2

も同じ問題がありました。問題は再度インデントされました。定義時:

def post(self): 

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

+0

ありがとう。それは助けになった。 :-) –

0

メモ帳++を使用して同じ問題に陥る。私がこれを読むまで、何が間違っていたかを理解するための日をとった。 Python IDLEを使用するように切り替えました。魅力のように動作します。 @Arisをエコーし​​て、伝統的なPython IDEを使用するのが最善の方法だと言います。

1

私はNotepad ++でも同じ問題がありました。私がPython IDLEで変更したのは、いくつかのスペースをタブで置き換えて、うまくいきました:)

0

ハンドラの順序を並べ替えると修正されたコードで同じ問題が発生しました。ハンドラの定義、インデントのエラーをチェックし、最終的にはハンドラの順番を見て修正しました。

関連する問題