Google App Engine - 如何将代码拆分成多个文件?(webapp)
我有个关于如何拆分 main.py 文件的问题。
现在,我所有的代码都在 main.py 里,没有其他的 .py 文件。每次我想编辑某个部分时,都得不停地滚动很长的代码行,才能找到我想改的地方。
我该怎么把它拆分开呢? (我将会有超过 20 页的代码,如果不拆分,main.py 会变得非常庞大。)
另外,我还注意到每次都得设置模板的值、模板路径,并调用 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
谢谢你的建议,我真的很感激。
关于把导入的内容放在一起,我尝试把所有与应用引擎相关的导入放在一个叫做 ext.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 *
3
把你的类定义在其他的 .py 文件里,然后在你的 main.py 文件中用 "import" 来引入它们。其实这非常简单。
22
把代码拆分开来和拆分任何Python应用的代码没什么不同。你只需要找到一堆相关的代码,想把它们移到另一个文件里,然后把这个文件导入到主处理文件中。
举个例子,你可以把Page2的代码移到一个叫page2.py的文件里,然后在文件顶部加上
import page2
接着把你的映射改成从/page2
加载page2.Page2
(在这种情况下,你可能还想重命名这些类……)
另外,你也可以通过编辑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
移到另一个文件里,然后在需要的地方导入它。