2014-10-27 2 views
0

Я конвертирую приложение App Engine для приложений python для использования модулей, как описано в этой статье, https://cloud.google.com/appengine/docs/python/modules/. Я хотел бы использовать собственный обработчик как базовый класс в каждом из моих модулей, чтобы добавить некоторые общие функции. Нужно ли мне повторять код пользовательского обработчика в каждом модуле или есть способ импортировать этот класс?Google App Engine Python - использование одного и того же базового обработчика в разных модулях

Например, я хотел бы свою архитектуру, чтобы выглядеть следующим образом:

MyProject 
├── common 
│ ├── my_handler.py 
├── module1 
│ │ ├── module1.yaml 
│ │ ├── main.py 
├── module2 
│ │ ├── module2.yaml 
│ │ ├── main.py 

/common/my_handler.py не является частью модуля приложения двигателя и выглядит следующим образом:

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 

модулей, кажется, песочницы. Можно ли импортировать /common/my_handler.py из /module1/main.py?

ответ

2

Есть несколько вещей, которые вы могли бы попробовать here, такие как:

from ..common import BaseHandler

или добавить путь к глобальному пути:

sys.path.append(os.path.join(os.path.dirname(__file__), '..')) 
import common.my_handler as BaseHandler 
Смежные вопросы