gpt4 book ai didi

python - Pyramid 如何设置api中间件?

转载 作者:太空宇宙 更新时间:2023-11-04 01:24:23 24 4
gpt4 key购买 nike

我一直在深入研究 Pyramid ,我希望设置一个中间件来为我的 api 提供服务。我已经使用 DispatchMiddleware 通过 werkzeug 完成了此操作。

我怎样才能在 Pyramid 内实现这一目标

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

项目/api/初始化.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

项目/网络/初始化.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 作品

最佳答案

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 分派(dispatch)应该可以让您在应用程序的前缀处更简单地挂载东西。 URL dispatch 中的路由是按顺序匹配的,所以请确保 api 走在 default 之前,否则所有内容都会发送到 default 路由。

关于python - Pyramid 如何设置api中间件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19020418/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com