私はapp.yamlファイルで約100個のURLを指定してウェブサイトを稼働させています。 app.yamlは100個のURLに制限されているため、app.yaml指定のルーティング手順をmain.pyに転送する方法を解明しようとしています。 app.yamlファイルを変更してmain.pyにすべてのリクエストを送信したいのですが、app.yamlが現在行っているようにmain.pyがリクエストをルーティングするようにします。私は以下の3つのファイルを試していますが、/ test1以外のURLを要求すると、 "Hello from MainHandler from test1.py"の応答を得ることができません。なぜ私はブラウザの応答を "mainHandler from test1.pyで"取得していないのですか?/ xyzのURLを要求しますか?Q:Google Apps Engine app.yaml main.py内からURLを処理する方法は?
試験1:
リクエスト:/ TEST1
応答:こんにちはMainHandlerから
test1.py試験2:
リクエスト:/例
応答:こんにちはExampleHandler from main.py
テスト3:
要求:/ XYZ
応答:こんにちはMainHandler
はなぜTest3は上記にも "こんにちはtest1.pyでMainHandlerから" とどのようにすることができますが、応答にはなりませんmain.pyに私はこれを起こさせる?
main.py:
#!/usr/bin/env python
import webapp2
class MainHandler(webapp2.RequestHandler):
def get(self):
self.response.write('Hello MainHandler in main.py<br>')
import test1
test1.app
class ExampleHandler(webapp2.RequestHandler):
def get(self):
self.response.write('Hello from ExampleHandler in main.py<br>')
app = webapp2.WSGIApplication([
('/example', ExampleHandler),
(r'.*', MainHandler)],
debug=True)
test1.py:
import webapp2
class MainHandler(webapp2.RequestHandler):
def get(self):
self.response.write('Hello from MainHandler in test1.py')
app = webapp2.WSGIApplication([(r'.*', MainHandler)], debug=True)
if __name__ == "__main__":
app
app.yamlを:
application: test-for-rr
version: 1
runtime: python27
api_version: 1
threadsafe: yes
handlers:
- url: /favicon\.ico
static_files: favicon.ico
upload: favicon\.ico
- url: /test1
script: test1.app
- url: .*
script: main.app
libraries:
- name: webapp2
version: "2.5.2"
私が/ xyzをリクエストした3番目のテストでは、このURLに特定の一致がないため、app.yamlの正規表現と一致し、main.pyにルーティングされます。 main.pyでは、MainHandlerにルーティングされます。私がまだ理解していないのは、MainHandlerの下でtest1をインポートし、それをtest1.appという行で実行しようとしたときです。なぜなら、それが実行されず、 "Hello from MainHandler from test1.py"というメッセージが返されます。このメッセージは返されませんが、main.py内からtest1.appを実行すると予想されます。 – carson
@carson - 'WSGIApplication'のインスタンスを参照するだけでは、' WSGIApplication'にルーティング要求が与えられてから、その要求を適切なハンドラにルーティングする必要があるため、実際には何も実行されません。実際には、ハンドラの内部から、リクエストをさらにルーティングするための最善の方法は何であるべきかはっきりしていません...一般的には、 'WSGIApplication'の中ですべてのルーティングをしたいとします。 – mgilson
解決策の1つは、上記のmain.pyのapp = webapp2.WSGIApplication行にタプル( '/ xyz'、test1.MainHandler)を追加することです。ただし、最初にtest1をインポートする必要があります。私の問題は、app.yamlファイルの100のURL制限です。私は100以上のファイルをmain.pyに無作為にリクエストできるようにする必要はないので、まずmain.pyでリクエストされたURLを特定する方法を見つけようとしています。一連のif文。私はその後、特定の要求に必要なモジュールのみをインポートし、別のファイルのハンドラに指示します。 – carson