2

私はピラミッドを掘り下げてきました.APIを提供するミドルウェアをセットアップしようとしています. DispatchMiddleware を使用して werkzeug でこれを行いました。

ピラミッド内でこれを達成するにはどうすればよいですか

project
 | __init__.py
 | api
 | | __init__.py
 | web
 | | __init__.py

プロジェクト/api/init.py _

def main(global_config, **settings):
    """ This function returns a Pyramid WSGI application.
    """
    config = Configurator(settings=settings)

    config.include('cornice')
    api_includes(config)
    config.scan() // scan only api_includes/routes

    app = config.make_wsgi_app()

    return app

プロジェクト/web/init.py _

def web_includes(config):
    config.include('project.posts', route_prefix='/post')

def main(global_config, **settings):
     """ This function returns a Pyramid WSGI application.
     """
     config = Configurator(settings=settings)
     config.include('pyramid_chameleon')
     config.add_static_view('static', 'static', cache_max_age=3600)

     web_includes(config)
     config.add_route('home', '/')
     config.scan() // only web_includes/routes
     app = config.make_wsgi_app()

     return app

プロジェクト/初期化.py

from pyramid.config import Configurator

from api import main as api_main
from web import main as web_main

from pyramid.wsgi import wsgiapp, wsgiapp2


def main(global_configs, **settings):
    web = wsgiapp2(web_main(global_configs, **settings))
    api = wsgiapp2(api_main(global_configs, **settings))


    config = Configurator()
    config.add_view(web, name='/')
    config.add_view(api, name='api')


    return config.make_wsgi_app()

私のAPIにアクセスすると機能しますが、「/」または「」ではない名前を指定しない限り、Webルートに行くと機能しません。たとえば:

config.add_view(web, name='foo')

/foo または /foo/post に移動すると動作します

4

1 に答える 1

3
config.add_route('api', '/api/*subpath')
config.add_route('default', '/*subpath')

config.add_view(web, route_name='default')
config.add_view(api, route_name='api')

URL ディスパッチを使用すると、アプリケーション内のプレフィックスにもう少し簡単にマウントできるようになります。URL ディスパッチのルートは順番に一致するため、API がデフォルトの前にあることを確認してください。そうしないと、すべてがデフォルト ルートに送信されます。

于 2013-09-26T18:19:02.520 に答える