Python的事件驱动Web框架

1 投票
6 回答
1821 浏览
提问于 2025-04-15 12:36

嗨,

有没有什么基于事件驱动的Python网页框架呢?

我想要的东西就像NitroGen对于Erlang的那种。

简单来说,就是你可以添加一些组件到网页上(比如一个按钮),然后把一个Python函数和这个按钮的“点击”事件关联起来,这样当按钮被点击时,那个函数就会执行。这个框架应该能为我生成所有需要的HTML和JavaScript代码(就像Nitrogen那样),并支持所有必要的组件(比如span、p、button、文本框、密码框等等)。就像下面的代码:

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)

这段代码会生成这个

我找到的唯一一个框架是PyJamas,但它是为网页应用(比如网页邮件)设计的,而不是为网页(那些谷歌需要索引的内容,并且应该在没有JavaScript的情况下可读,功能有限)设计的。那么有没有类似于PyJamas或Nitrogen的东西呢?

谢谢!

6 个回答

1

Zope 3 可能适合你的需求(如果在 Twisted 上使用的话,现在可能是这样),还有 Divmod Mantissa 也可能合适——这两个都是非常注重事件驱动的,特别是 Mantissa,基本上可以说它们都不是“底层”的东西,尤其是 Zope(其实人们常常抱怨 Zope 太复杂、太高级,难以掌握;-)。

1

HTML本身不是事件驱动的,所以你不能像那样创建一个事件驱动的网页框架,除非使用Ajax,但你并不想这样。所以答案是否定的,因为这种事情根本不可能。

我猜你想说的不是事件驱动,而是你有一个系统,可以定义一个结构,然后自动生成表单。其实每个网页框架都有这个功能。

如果你喜欢组件和事件驱动的开发,可以看看基于Zope工具包的网页框架,比如Grok、Repoze.BFG、Zope3,还有最新的Bobo。

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

补充:好的,显然问题只出在Pyjamas上,而不是使用Javascript。在这种情况下,上面提到的KSS是可以用的,并且可以与上述框架一起使用!

3

KSS(动态样式表)提供了一些类似于NitroGen的功能。不过,KSS和NitroGen的不同之处在于,KSS定义了一种简单的特定领域语言(DSL),用来声明如何将JavaScript事件绑定到客户端的HTML页面上。而且,这种DSL还可以声明事件需要通过AJAX触发服务器端的组件。使用NitroGen和PyJamas时,JavaScript与HTML之间的交互信息是从服务器端语言的数据结构中推导出来的。

http://kssproject.org/

根据KSS项目的描述,“KSS同时拥有客户端的JavaScript库和服务器端的支持。客户端的JavaScript库需要被包含在你的页面中。它会从服务器获取动态样式表,解析这些样式表,并将一系列操作绑定到浏览器事件和/或页面元素上。这是一段干净的JavaScript代码,可以与其他干净的JavaScript库(比如JQuery或ExtJS)和平共处。”

KSS可以独立于任何Python或服务器端代码使用。不过,KSS也提供了一些功能,可以将KSS客户端事件绑定回Python网络框架中的服务器端可调用函数。KSS可以与许多流行的Python网络框架(如Django、Pylons、Zope、Plone、Grok)一起使用。

撰写回答