我想将一个巨大的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文件?有什么缺点?
希望你们能对此有所了解。
几个星期以来一直在考虑这个问题。
答案 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 )。
您基本上将新映射添加到几个不同的处理程序,并将它们组织为python模块。
(...)
from myapp import Part1, Part2 # etcetera
(...)
application = webapp.WSGIApplication([('/part1', Part1), ('/part2', Part2])])
如果您在模块化python代码时遇到问题,或许阅读the official docs会有所帮助。
修改强>:
我上面的答案与第一个答案基本相同,当我开始回答时,它就不存在了,抱歉。
稍微澄清为什么这比将每个部分作为单独的应用程序更好:
application
。即便如此,我认为最重要的一点是:代码组织将更容易实现,因为您可以在单个包/应用程序中分离应用程序和逻辑。