Google App Engine Python - 在不同模块中使用相同的基础处理程序
我正在把一个Python的App Engine应用程序转换成使用模块,具体的做法可以参考这篇文章,https://cloud.google.com/appengine/docs/python/modules/。我想在每个模块中使用一个自定义的处理器作为基类,以便添加一些共同的功能。我需要在每个模块中重复我的自定义处理器代码吗,还是有办法可以导入这个类呢?
比如说,我希望我的架构看起来像这样:
MyProject
├── common
│ ├── my_handler.py
├── module1
│ │ ├── module1.yaml
│ │ ├── main.py
├── module2
│ │ ├── module2.yaml
│ │ ├── main.py
/common/my_handler.py这个文件不是App Engine模块的一部分,内容如下:
import webapp2
class BaseHandler(webapp2.RequestHandler):
"""
BaseHandler for all requests
"""
pass
然后在/module1/main.py文件中,我想要做一些类似这样的事情:
import webapp2
from common.my_handler import BaseHandler
class module1Handler(BaseHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('Hello, this is module 1!')
app = webapp2.WSGIApplication(
[('/', module1Handler),
],
debug=True)
但是这样做是行不通的,服务器会报错,因为找不到common.my_handler.py:
ImportError: No module named common.my_handler
这些模块似乎是被隔离开的。那么,我能否从/module1/main.py中导入/common/my_handler.py呢?
1 个回答
0
你可以尝试一些方法,具体可以参考这里,比如:
from ..common import BaseHandler
或者把路径添加到全局路径中:
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
import common.my_handler as BaseHandler