【问题标题】:Make a pyramid app ready for standalone and embedded mode使金字塔应用程序为独立和嵌入式模式做好准备
【发布时间】:2013-07-25 14:22:59
【问题描述】:

我正在开发一个 wiki 引擎。由于这个应用程序本身就很有用(至少对于我公司的私人用途),它应该能够作为独立的金字塔应用程序运行,并具有自己的图形主题。 然而,wiki 功能也可以作为更大项目的一部分有用,我希望能够将其包含到其他金字塔应用程序中。

我已经找到了一些可以帮助我实现这一目标的金字塔功能,但首先我不确定这是否是最好的方法,其次一些问题仍然存在。

以下是我目前看到的潜在问题:

  • 模板:如何在独立模式和托管模式之间切换

  • 主机变量:如果我们可以重用主机模板,则可能需要一些变量来正确呈现模板,但访客(wiki 引擎)应用程序没有设置这些变量。

  • 身份验证:来宾应用程序定义了自己的登录系统(基于 pyramid_persona)。来宾应用能否重用主机认证系统?

我目前的想法是使用金字塔的config.include() 系统。在 wiki 引擎中,在 __init__.py 中,我定义了一个 include(config) 方法以及用于独立模式的 main() 方法。

然后,在主机应用程序中,我在 .ini 文件中定义一个变量,该变量指向来宾应使用的模板文件(即base_template = hostapp:templates/wikibase.mako

在来宾应用程序中,includeme() 方法读取 base_template 变量并覆盖一些全局配置。

然后每个访客视图的工作方式如下:

from pyramid.renderers import render

@view_config(route_name="display_wiki_page",  renderer=Globals.base_template)
def view_wiki(request):
    """returns a formatted page content"""
    page = request.matchdict['page']
    content = get_raw_page_content_from_database(page)

    page_formatted = render("wikiengine:templates/page_formatting_template.mako", 
        {'request': request, 'content': content} )

    return {'page_formatted': page_formatted}

因此,从这一点开始,基本模板可以是来自来宾或主机应用程序的模板。两者都将包含类似(在 mako 中):${page_formatted | n }

但这并不能解决客户代码渲染模板所需的主机变量问题。例如,主机可能需要有一个需要在每个主机页面上显示的hot_news 变量,甚至是托管 wiki 的页面。

为此,我计划使用事件系统,并为 NewRequest 或 BeforeRender 添加订阅者,并在请求对象中设置所需的变量。

这是正确的方法吗?有没有我正在尝试做的例子?

【问题讨论】:

    标签: plugins pyramid


    【解决方案1】:

    Pyramid 的配置机制使模块的客户端很容易覆盖配置。与其他流行的 Web 框架相比,这是 Pyramid 最强大的部分之一。

    config.include() 是解决问题的好方法。它允许调用者覆盖包含中定义的任何内容。

    可以使用config.override_assets() 覆盖资产。

    共享用户信息需要您的模块提供用户信息或定义某人可以遵守的合同,从而允许他们覆盖您的模型。

    无论如何,这显然是一个巨大的话题。在金字塔之上编写的高度模块化的应用程序包括 materiald、kotti、ptah、bookie 等。

    【讨论】:

    • 谢谢。将变量从主机传递到来宾应用程序怎么样。我可以将属性附加到订阅者的请求对象还是有更好的方法?
    • config.add_request_method()
    猜你喜欢
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 2012-10-03
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多