2016-10-19 6 views
0

я реализовал проект конечной точки:Можно ли провести конечную точку и применение WSGIApplication в моторном проекте же приложение

@endpoints.api(name='froom', version='v1', description='froom API') 
class FRoomApi(remote.Service): 
    @endpoints.method(FbPutRoomRequest, RoomMessage, path='putroom/{id}', http_method='PUT', name='putroom') 
    def put_room(self, request): 
     entity = FRoom().put_room(request, request.id) 
     return entity.to_request_message() 

application = endpoints.api_server([FRoomApi],restricted=False) 

app.yaml

- url: /_ah/spi/.* 
    script: froomMain.application 

- url: .* 
    static_files: index.html 
    upload: index.html 

и у меня есть отдельный проект WSGI-дзиндзя:

routes = [ 
    Route(r'/', handler='handlers.PageHandler:root', name='pages-root'), 
    # Wipe DS 
    Route(r'/tasks/wipe-ds', handler='handlers.WipeDSHandler', name='wipe-ds'), 
    ] 
config = { 
    'webapp2_extras.sessions': { 
     'secret_key': 'someKey' 
    }, 
    'webapp2_extras.jinja2': { 
     'filters': { 
      'do_pprint': do_pprint, 
      }, 
     }, 
    } 
application = webapp2.WSGIApplication(routes, debug=DEBUG, config=config) 

app.yaml

- url: /.* 
    script: froomMain.application 

Можно ли провести эти два проекта в одном приложении

ответ

1

Основная проблема, которую необходимо рассмотреть, является определение соответствующего общего пространства имен запроса приложение таким образом, что маршрутизация к соответствующему суб-приложение может быть надежно , имея в виду, что:

  • только один суб-приложение может быть назначен в качестве используемого по умолчанию (который будет обрабатывать запросы не соответствующие какой-либо из других пространств имен суб-приложений).
  • пространств имен для всех нестандартных суб-приложений должны быть проверены, прежде чем пространство имен по умолчанию суб-приложение
  • решение маршрута к одному суб-приложение является окончательным, если оно не может обработать запрос его я верну 404, нет другого возврата к другому суб-приложению, которое могло бы обрабатывать запрос.

В вашем случае сложность возникает из конфликтных пространств имен суб-приложений. Например, и пути /, и /tasks/wipe-ds от проекта wsgi-jinja сталкиваются с пространством имен .* в проекте конечных точек. Чтобы заставить его работать, одно из пространств имен суб-приложений должно быть изменено.

Поскольку проект endpoints содержит много сгенерированного сгенерированного кода, его сложнее изменить, поэтому я оставил бы это по умолчанию и изменил бы wsgi-jinja, например, путем префикса его с помощью /www. Для этого, чтобы работать внутренние маршруты в WSGI-дзиндзя в должны быть внесены соответствующие изменения:

  • / ->/www
  • /tasks/wipe-ds ->/www/tasks/wipe-ds

Обе существующие проекты, кажется, есть froomMain.py файл application глобальный внутри, конфликтующий. Я бы переименовать одну WSGI-дзиндзя, давайте говорить www.py:

routes = [ 
    Route(r'/www/', handler='handlers.PageHandler:root', name='pages-root'), 
    # Wipe DS 
    Route(r'/www/tasks/wipe-ds', handler='handlers.WipeDSHandler', name='wipe-ds'), 
    ] 
config = { 
    'webapp2_extras.sessions': { 
     'secret_key': 'someKey' 
    }, 
    'webapp2_extras.jinja2': { 
     'filters': { 
      'do_pprint': do_pprint, 
      }, 
     }, 
    } 
application = webapp2.WSGIApplication(routes, debug=DEBUG, config=config) 

Ваш файл app.yaml бы тогда:

- url: /www/.* 
    script: www.application 

- url: /_ah/spi/.* 
    script: froomMain.application 

- url: .* 
    static_files: index.html 
    upload: index.html 

 Смежные вопросы

  • Нет связанных вопросов^_^