使用Google App Engine Python的不同入口点

时间:2013-12-22 18:08:35

标签: python google-app-engine entry-point

我希望有这样的结构

http://localhost:8080/

http://localhost:8080/problem2/

http://localhost:8080/problem3/

...

我也想要像这样的python结构

-src

    - app.yaml
    - main.py
    - package_problem_2
        - main.py
    - package_problem_3
        - main.py

我想在我的网站上为不同的文件夹设置不同的main.py. 我的意思是,如果我在http://mydomain:8080src/main.py需要处理请求。但是,如果我在http://localhost:8080/problem2,那么它应该是package_problem_2/main.py处理请求的那个。

这可能吗?

1 个答案:

答案 0 :(得分:1)

您使用的是webapp2框架吗?

如果是这样,请继续阅读......

您需要四个文件。为简单起见,所有这些都位于应用的根文件夹中:

app.yaml
urls.py
SampleController.py
Sample.html
你app.yaml上的

,你应该有这样的东西:

handlers:
- url: /.*
  script: urls.ap

告诉appengine将所有url模式路由到urls.py。

然后在你的urls.py上,你有这个结构:

import webapp2
import SampleController

#For each new url structure, add it to router.
#The structure is [py filename].[class name inside py file]
app = webapp2.WSGIApplication(debug=True)
app.router.add((r'/', SampleController.SampleHandler))


def main():
    application.run()

if __name__ == "__main__":
    main()

关于你的问题,你有三个结构:/,/ problem2,/ problem3。他们会对应这些:

app.router.add((r'/', SampleController.SampleHandler))
app.router.add((r'/problem2', SampleController.SampleHandler2))
app.router.add((r'/problem3', SampleController.SampleHandler3))

由您来决定是否转到同一个处理程序。

SampleController.py如下所示:

import webapp2
import os

class SampleHandler(webapp2.RequestHandler):
    def get(self):
        template_values = {
            'handler': 'We are in SampleHandler',
            'param2': param2 
        }
        path = os.path.join(os.path.dirname(__file__), 'Sample.html')
        self.response.out.write(template.render(path, template_values))


class SampleHandler2(webapp2.RequestHandler):
    def get(self):
        template_values = {
            'handler': 'We are in SampleHandler2',
            'param2': param2 
        }
        path = os.path.join(os.path.dirname(__file__), 'Sample.html')
        self.response.out.write(template.render(path, template_values))


class SampleHandler3(webapp2.RequestHandler):
    def get(self):
        template_values = {
            'handler': 'We are in SampleHandler3',
            'param2': param2 
        }
        path = os.path.join(os.path.dirname(__file__), 'Sample.html')
        self.response.out.write(template.render(path, template_values))

请注意,它们都会转到相同的Sample.html文件。

Sample.html只是标准的HTML代码。