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)

这是我遇到的同样的问题 - > HERE 但给定的解决方案对我不起作用(即使它是相同的代码!!!)

这是处理程序(为了测试“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)

我想要实现的是将客户和存储删除拆分为两个单独的调用:

http://www.myapp.appspot.com/deleteCustomershttp://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)

以上将在您的 main.py 脚本中,通过 yaml 脚本中的以下调用路由:

- url: /.*
  script: main.app

然后在这种情况下,对于不同脚本 test.py 中的第二个 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 回答