用于Python的Eventdriven Webframework

时间:2009-06-30 22:28:09

标签: python frameworks

HY, 是否有基于事件驱动/事件的Python框架?

我的意思是NitroGen类似于erlang。

你只需要添加一些你添加到网站的组件(比如一个按钮),然后将一个python函数添加到按钮的“onclick”处理程序中,它就会被执行。它应该为我生成所有需要的html和js核心(就像氮一样)并支持所有需要的组件(如span,p,button,textbox,passwordfield ......) 如下代码:

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之类的东西)而不是针对Web-Pages(google需要内容索引,哪些内容应该可以在没有js的情况下读取,功能有限)。那么有类似睡衣或氮气的东西吗?

谢谢!

6 个答案:

答案 0 :(得分:3)

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绑定。

答案 1 :(得分:1)

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,如上所述工作。它可用于上面的框架!

答案 2 :(得分:1)

Zope 3可能适合您的目的(当在Twisted上使用时,现在可能是这样),因此可能Divmod Mantissa - 它们肯定都是强烈事件驱动的,尤其是Mantissa,和_any_thing “低级别”,特别是Zope(事实上经常抱怨后者,它只是太丰富和高级别掌握; - )。

答案 3 :(得分:1)

尝试使用Nagare,我正在寻找相同的东西,Nagare可能就是答案:

http://www.nagare.org/

答案 4 :(得分:0)

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)

答案 5 :(得分:-1)