Google App Engine - 如何将代码拆分为多个文件? (web应用)

时间:2009-12-27 20:40:02

标签: python google-app-engine web-applications

我有一个关于拆分main.py文件的问题。

现在,我的main.py中包含了所有内容。我没有其他.py文件。在到达我想编辑的部分之前,我总是需要滚动长行代码。

如何拆分? (我将有超过20页,所以这意味着如果我不拆分它,main.py将是巨大的。

PS:另外,我注意到每次都必须设置模板值,模板路径和调用template.render。有什么方法可以缩短它们吗?

代码:

    # everything here in main.py
class MainPage(webapp.RequestHandler):
    def get(self):
        # Models are queried here, results transferred to template_values

        template_values = {
            'value1': value1,
            'value2': value2,
            'value3': value3,
            }

        path = os.path.join(os.path.dirname(__file__), 'index.html')
        self.response.out.write(template.render(path, template_values))

class Page2(webapp.RequestHandler):
    def get(self):
        # Models are queried here, results transferred to template_values

        template_values = {
            'value1': value1,
            'value2': value2,
            'value3': value3,
            }

        path = os.path.join(os.path.dirname(__file__), 'index.html')
        self.response.out.write(template.render(path, template_values))

class Page3(webapp.RequestHandler):
    def get(self):
        # Models are queried here, results transferred to template_values

        template_values = {
            'value1': value1,
            'value2': value2,
            'value3': value3,
            }

        path = os.path.join(os.path.dirname(__file__), 'index.html')
        self.response.out.write(template.render(path, template_values))


application = webapp.WSGIApplication(
                                     [('/', MainPage),
                                      ('/page2', Page2)
                                      ('/page3', Page3)],
                                     debug=True)

def main():
    run_wsgi_app(application)

if __name__ == "__main__":
    main()

3 个答案:

答案 0 :(得分:22)

拆分代码与拆分任何Python应用程序的代码没什么不同 - 查找一堆相关代码,将其移动到另一个文件,将其移动到该文件,然后将其导入主处理程序文件。

例如,您可以将Page2代码移至page2.py,将

移至
import page2

位于文件的顶部,并将映射更改为从/page2加载page2.Page2(在这种情况下,您可能希望重命名这些类...

或者,如Script Handlers中所述,您可以通过编辑app.yaml文件,让单独的.py文件处理不同的(页面组)页面。

您可以将模板处理代码包装在一个便利函数中并调用它,以减少重复的代码。您可以简化模板值的加载,但是一旦想要渲染,就可以调用类似

的方法。
def render(template_file, template_values):
    path = os.path.join(os.path.dirname(__file__), template_file)
    self.response.out.write(template.render(path, template_values))

节省的不多,但它更具可读性。您可能希望将render移动到其他文件,并将import移动到您想要的位置。

答案 1 :(得分:2)

在其他.py文件中定义类,并使用“import”在main.py中使用它们。实际上很简单。

答案 2 :(得分:0)

对于输入,感谢他们。

至于将导入分组在一起,我试图将所有与app引擎相关的导入保存到名为ext.py的.py文件中

然后我在任何想要通过这一行使用它的地方打电话:

from ext import *

ext.py包含以下内容:

import os

# import from appengine's libs
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext.webapp import template
from google.appengine.ext import db

# import models
from models import *