【问题标题】:Eventdriven Webframework for Python [closed]Python的事件驱动Web框架[关闭]
【发布时间】:2009-06-30 22:28:08
【问题描述】:

嘿, 是否有任何用于 Python 的事件驱动/基于事件的 Web 框架?

我的意思是像 NitroGen 这样的东西是为 erlang 准备的。

您只需获取添加到网站的一些组件(如按钮),并将 python 函数关联到按钮的“onclick”处理程序,然后它就会被执行。它应该为我生成所有需要的 html 和 js 核心(就像氮气一样)并支持所有需要的组件(如 span、p、按钮、文本框、密码字段......) 像下面的代码:

from pyjamas.ui.RootPanel import RootPanel
from pyjamas.ui.Button import Button
from pyjamas import Window

def greet(fred):
    Window.alert("Hello, AJAX!")

if __name__ == '__main__':
    b = Button("Click me", greet)
    RootPanel().add(b)

得到this

我发现的唯一框架是PyJamas,但它是为 Web 应用程序(如 Webmailers 之类的东西)而不是为网页(谷歌需要索引内容并且应该在没有 js 的情况下可读,功能有限)而设计的)。那么有没有类似睡衣或氮气之类的东西?

谢谢!

【问题讨论】:

    标签: python frameworks


    【解决方案1】:

    KSS(Kinetic Style Sheets)提供类似于 NitroGen 的东西。虽然 KSS 与 NitroGen 的不同之处在于它定义了一种简单的域特定语言 (DSL),用于声明 JavaScript 事件应如何绑定到客户端的 HTML 页面,并且此 DSL 还可以声明事件需要触发服务器端通过 AJAX 组件。使用 NitroGen 和睡衣,包含 JavaScript 如何与 HTML 交互的信息是从属于服务器端语言一部分的数据结构中推导出来的。

    http://kssproject.org/

    从 KSS 项目描述中,“KSS 具有客户端 Javascript 库和服务器端支持。客户端 Javascript 库需要包含在您的页面中。它从服务器获取 Kinetic 样式表,解析它们并将一组操作绑定到浏览器事件和/或页面元素。它是干净的 Javascript 代码,可以与其他干净的 Javascript 库(如 JQuery 或 ExtJS)和平共存。”

    KSS 可以独立于任何 Python 或服务器端代码使用。但是,KSS 中有一些工具可以将 KSS 客户端事件绑定回 Python Web 框架中的服务器端可调用对象。许多 Python 流行的 Web 框架(Django、Pylons、Zope、Plone、Grok)都有一些绑定可以使用 KSS。

    【讨论】:

      【解决方案2】:

      Zope 3 可能适合您的目的(当在 Twisted 之上使用时,就像现在一样),Divmod Mantissa 可能也是如此——它们肯定都是强烈的事件驱动的,尤其是 Mantissa 和 _any_thing 但是“低级”,尤其是 Zope(确实经常抱怨后者是它太丰富太高级而无法掌握;-)。

      【讨论】:

        【解决方案3】:

        HTML 不是事件驱动的,因此如果不借助 Ajax,就无法制作像这样的事件驱动的 Web 框架,而且您也不想这样做。所以答案是否定的,因为这样的事情根本不可能,

        我怀疑您的意思不是事件驱动,而是您有一个系统,您可以在其中定义架构并为您生成表单。每个 Web 框架都有。

        但是你们当中喜欢组件和事件驱动的开发,看看基于 Zope Toolkit 的 Web 框架,即 Grok、Repoze.BFG、Zope3 和其中最新的:Bobo。

        http://grok.zope.org/ http://bfg.repoze.org/ http://wiki.zope.org/zope3/Zope3Wiki http://bobo.digicool.com/

        编辑:好的,显然问题只出在睡衣上,而不是使用 Javascript。 在这种情况下,如上所述,KSS 有效。它可以与上面的框架一起使用!

        【讨论】:

        • HTML 本身不是事件驱动的,但使用 ajax 可以。所以正如我在我的问题中所写,我正在寻找一个工具包来生成 html 和 js。但是为了 seo 目的,简单的(非动态的、非基于事件的内容)应该在 html 中。我希望你现在明白了。
        • 啊,当然。你是说睡衣不能做到这一点?这有点糟糕,在那种情况下......
        【解决方案4】:

        试试 Nagare,我正在寻找同样的东西,Nagare 可能就是答案:

        http://www.nagare.org/

        【讨论】:

          【解决方案5】:

          Nagare 的示例:

          from nagare import presentation
          
          def greet(self):
              window.alert('Hello world!')
          
          class MyComponent(object):
              pass
          
          @presentation.render_for(MyComponent)
          def render(self, h, *args):
              return h.input(type='submit', onclick=greet)
          

          【讨论】:

            【解决方案6】:

            【讨论】:

            • 它是低级的,我正在搜索知道我想要放置到 html 页面上的组件并生成所需的 html 和 js 代码以将其连接到我的 python 代码的东西。