0

さまざまな URL をさまざまな Python スクリプトにマップしようとしています。

これは私のyamlです

application: myApp
version: 99
runtime: python27
api_version: 1
threadsafe: yes

handlers:
- url: /favicon\.ico
  static_files: favicon.ico
  upload: favicon\.ico

- url: /deleteCustomers
  script: test.app

- url: /.*
  script: main.app

libraries:
- name: webapp2
  version: "2.5.2"

builtins:
- remote_api: on

http://myapp.appspot.com/testにアクセスすると、「404 not found」と表示されます... http://myapp.appspot.comにアクセスすると、適切なスクリプトが起動されます (main.app)

ここに私が抱えている同じ問題があります->ここにあります が、与えられた解決策は私にとってはうまくいきません(同じコードであっても!!!)

ハンドラーは次のとおりです (「2 パス yaml」をテストするために、main.app を複製しました。これは、顧客と店舗のクラスと mainhandler を保持し、名前を test.app に変更しました。つまり、main.app と test.app は同じです)

class MainHandler(webapp2.RequestHandler):
    def get(self):
        customers = Customers.all()
        stores = Stores.all()

        countCustomers= 0
        countStores= 0

        for p in customers:
            p.delete()
            countCustomers+= 1
        for p in stores:
            p.delete()
            countStores+= 1

        self.response.out.write("\nDeleted Customers: " + str(countCustomers))
        self.response.out.write("\nDeleted Stores: " + str(countStores))

app = webapp2.WSGIApplication([
    ('/', MainHandler)
], debug=True)

私が達成したいのは、顧客と店舗の削除を2つの別々の呼び出しに分割することです:

http://www.myapp.appspot.com/deleteCustomersおよびhttp://www.myapp.appspot.com/deleteStores

よろしくお願いいたします。

4

1 に答える 1

1

両方のスクリプトがまったく同じであると言う場合は、MainHandlerを指すために同じ「/」を使用していると仮定します。私はあなたを正しく理解しているのかよくわかりませんが、これはあなたを助けるための私の試みです。ストアの削除と顧客の削除を2つの異なるスクリプトに分割するには、コードを各URLにマップされた2つの異なるハンドラーに分割する必要があります。

class StoreDeletionHandler(webapp2.RequestHandler):
def get(self):
    stores = Stores.all()

    countStores= 0

    for p in stores:
        p.delete()
        countStores+= 1

    self.response.out.write("\nDeleted Stores: " + str(countStores))        


app = webapp2.WSGIApplication([('/deleteStores', StoreDeletionHandler)], debug=True)

上記は、yamlスクリプトで次の呼び出しを使用してルーティングされたmain.pyスクリプトに含まれます。

- url: /.*
  script: main.app

次に、この場合、別のスクリプトtest.pyの2番目のURLについて:

class CustomerDeletionHandler(webapp2.RequestHandler):
    def get(self):

        customers = Customers.all()
        countCustomers= 0

        for p in customers:
            p.delete()
            countcustomers+= 1

        self.response.out.write("\nDeleted Customers: " + str(countCustomers))

app = webapp2.WSGIApplication([
('/deleteCustomers', CustomerDeletionHandler)
], debug=True)

yamlファイルでは、次の方法でURLをスクリプトにマップします。

- url: /deleteCustomers
  script: test.app

また、後続のすべてのルートをtest.pyスクリプトに転送するには、URLが「/deleteCustomers」プレフィックスで始まる必要があることに注意してください。

だからこのようなもの:

http://www.myapp.appspot.com/deleteCustomers/NewUrl1
http://www.myapp.appspot.com/deleteCustomers/SomethingElse
http://www.myapp.appspot.com/deleteCustomers/YetAnotherUrlForTestpy

上記のすべては、test.pyスクリプトに送信されます。main.pyスクリプトにリダイレクトするには、/deleteCustomers以外にルーティングするだけです。

http://www.myapp.appspot.com/ThisGoesToMain
http://www.myapp.appspot.com/deleteStores #also goes to main
http://www.myapp.appspot.com/deleteStores/YetAnotherUrlForMain

これがあなたが望んでいたことだといいのですが。

于 2013-03-13T08:47:02.423 に答える