Google App Engine Python WebApp - 我这样做了吗?

时间:2009-12-27 18:00:49

标签: google-app-engine

我想知道我是否正确行事。

我想将一个巨大的py文件拆分成十个.py文件(或控制器,如果你 将)。原因是它很整洁,并且在一个文件中不包含数千个代码行。

每个.py文件都有自己的请求处理程序。

每个.py文件都将提供某种功能。

(问题在“守则”部分之后)

代码:

# *****app.yaml***** 
handlers: 
url: /part1 
script: controllers/part1.py 
url: /part2 
script: controllers/part2.py 
# this goes on until part10.py 


# ***** part1.py (this is the entry point of the application)***** 
# all required imports ( about 20 imports, some from app engine, some from external libs ) 

class Part1(webapp.RequestHandler): 

  # a lot of code here 
  # Models are accessed, data retrieved and worked upon. Results of the work are    
  # sent directly to the template_values variable

  # point to template 
  path = os.path.join(os.path.dirname(__file__), 'templates/part1.html')

  template_values = { 'variable ':variable } 
  # render template 
  self.response.out.write(template.render(path, template_values)) 

  # the standard WSGI calls 
  application = webapp.WSGIApplication([('/part1', Part1)],debug=True) 

def main(): run_wsgi_app(application) 
if __name__ == "__main__": main() 

附加说明: 对于part2.py直到part10.py,它遵循完全相同的格式 part1.py。

到目前为止,它一直在开发和生产服务器上为我工作。

我担心: 1.我是否对应用引擎服务器bcos征税,每个.py文件中的导入是重复的? 2.每个.py文件都有一个请求处理程序吗?我消耗了太多资源吗?

最大的问题是,随着应用程序的增长,我可以继续这样做吗? 我添加更多代码/功能)?这是一路扩展的方式吗? 最多N个.py文件?有什么缺点?

希望你们能对此有所了解。

几个星期以来一直在考虑这个问题。

2 个答案:

答案 0 :(得分:1)

为什么不只有一个模块包含所有请求处理程序,然后单独的模块实际处理请求?

编辑:在Main.py中设置您的服务器,然后在不同的文件中定义每个处理程序类。无论如何,我就是这样做的。

application = webapp.WSGIApplication([('/part1', Part1),
                                     ('/part2', Part2)
                                     ],debug=True) 
run_wsgi_app(application)

然后在其他文件中定义Part1和Part2类。

很抱歉首先不清楚。

答案 1 :(得分:1)

如果这些是同一个应用程序的“部分”,你应该使用URL映射来分隔它们,这样维护就更容易了(因为url端点将是“集中式的”,你将在python中编辑它们)和一切变得更简洁(app.yaml maps applications )。

Read this for clarification

您基本上将新映射添加到几个不同的处理程序,并将它们组织为python模块。

(...)
from myapp import Part1, Part2 # etcetera

(...)
application = webapp.WSGIApplication([('/part1', Part1), ('/part2', Part2])])

如果您在模块化python代码时遇到问题,或许阅读the official docs会有所帮助。

修改

我上面的答案与第一个答案基本相同,当我开始回答时,它就不存在了,抱歉。

稍微澄清为什么这比将每个部分作为单独的应用程序更好:

  • 每次重启应用程序时,模块加载只会执行一次
  • 如果你检查你的appengine仪表板,一些模块可能需要时间加载(大多数时候它们很大,显然)
  • 分析整个集合只需要将中间件添加到application

即便如此,我认为最重要的一点是:代码组织将更容易实现,因为您可以在单个包/应用程序中分离应用程序和逻辑。