## page was renamed from DragonPy ##language:zh ''' WukooPy ''' -- Web usage Keep object of Python '''悟空系统''' -- 保持对象化的 Web应用! * 又一个新的webapp架构,它是面向python程序员的,包含了 Karrigell 和 Quixote 以及其它优秀思想!大家一起来造这个轮子吧! ::-- ZoomQuiet [<>] <> ||{{attachment:Logo.jpg}}||` `||<>|| = 缘起 = '''现有 Web Application 点评''' ''这么多Web Application,到底用什么好啊'' 俺以前一直用zope,后来感觉是越来越差,原因与Quixote和Cherrypy的作者差不多,网上有他们的文章,俺这里就不说了。后来找啊找啊,前前后后重点试过Quixote、Cherrypy、Karrigell,感觉都还不错,各有各的特点: 1. Cherrypy: * 将对象机制引入web开发,完全的面向对象发布机制,底层数据、api函数使用cpg集中管理。缺点是底层api调用代码老在变,天啊,俺真的受不了,以前做了一个cherrypy小应用,前前后后重构了10来遍,每次只要用svn更新一下cherrypy代码,就得改一次俺的应用代码。俺就搞不明白,比如一个调用session,就用cpg.sessions就成了吧,为什么一会儿这个样式,一会儿另外个样式。 1. Quixote: * 不错,发布方式多,代码结构好,质量最佳,基本上没什么BUG。只是语法调用有点怪异,适应了半天,最后还是不适应。 1. Karrigell: * 最易用的系统,入门真简便,良好的debug框架,动态载入。只是代码结构不好,做个应用就得将Karrigell移过去。再有url不支持定制,太有局限性,比如我动态生成一个js文件,总不能扩展名是个py,hip...吧,而且作者象俺有点不务正业,不老老实实做好框架,却去设计什么dbstrange,还做了一堆没用的半成品,唉,有这功夫把自留地种好啊。感觉做做原型、快速开发还不错。 * PS:这两天谈的比较多的是ruby的web架构,不太感冒,这东东也就是让java程序员见识一下:哦,这么这么简单啊,其实不用编码的框架是不存在的,功能实现与编码量本身就是一对对头。 == 自我需求 == 见识了这么多框架,俺理想的架构长得模样也自然产生了(主要性能): 1. 具有多多的发布接口,象Quixote,就是俺以前提过的万能接口,接口越多,余地越大啊。 1. 底层API与数据的集中管理与调用。比如dgn.get_request(),dgn.get_reponse(),这里的特性是Quixote与Cherrypy的结合和升华。 1. 简便的发布方式。考虑web前端部份的python代码是最易变的,尽可能简单,易读。利用所有都是对象的性能,选择函数发布。 1. 支持url定制,易url的default性能。这个需求好象现在很重要,总比使用apache的mod_write好多了。 1. 语法规则分离出来,用户可使用内置规则,也可定制自已的。内置:quixote_publish1,quixote_publish2,karrigell和函数发布 1. 方便的角色、权限定义和管理 == 设定前题 == 系统使用Karrigell和Quixote代码,对于这两个系统的补丁修改,一律使用动态修正方式偷梁换柱,不改变系统的任何代码,以满足原系统的升级和版权等要求。 使用Karrigell的发布方式注意,需将Karrigell发布为KarrigellLib包。即增加__init__.py,放在site_packages下 === 特性预览 === 还是用一个简便例子说明: {{{ #!python #--系统函数-- def _charsetGB2312(fn): '''函数包装函数,将页面设为gb2312''' def _init(dgn,*args): dgn.set_charset('gb2312') return fn(dgn,*args) return _init def _baseAuth(dgn,func,realm='Protected'): '''权限函数,只有我能上''' t=dgn.get_baseauth() if t is not None and t==('lihui','password'): result=None else: dgn.set_status(401) dgn.set_header('WWW-Authenticate', 'Basic realm="%s"' % realm) result=True return result #--web前端-- def helloworld1(dgn): '''发布一个函数,dgn为数据api集中调用入口,为第一个参数,dgn使用的singlon模式,除系统内置定义外,可自行加入定义,比如dbpool,可定义为dgn.db.dbpool ''' return 'helloworld1' def helloworld2(dgn): '''发布一个函数,加个权限''' return 'helloworld1' helloworld2._q_access=_baseAuth def helloworld3(dgn): '''发布一个函数,gb2312发布''' return 'helloworld1' helloworld3=_charsetGB2312(helloworld3) def helloworld4(dgn,*args): '''有args的支持default,比如这个函数url为http:/***/p,这个http:/***/p/1/1/1.html,则转为args=['1','1','1.html']''' return 'helloworld1' def helloworld5(dgn): '''发布一个图形文件''' return "图文件" def images(dgn,*args): '''发布images子目录,静态目录''' return dgn.StaticDirectory(os.path.join(dgn.get_config().path_top,'images'),*args) #--发布函数 def root(): result=helloworld1 result.images=images result.hl2=helloworld2 result.hl3=helloworld3 result.hl4=helloworld4 result.hl5_jpg=helloworld5 #扩展名为jpg return result }}} === 网站架构组合 === 原来一直用的是zope的zpt和dtml,cherrytemplate是两者的混合,使用很方便,模块就选它拉 sqlobject真不错,实行了关系数据库+逻辑+对象处理,zodb和存储过程俺再也不用拉。 俺的最佳组合就是dragon+cherrytemplate+sqlobject = 下载 = 0.11 版发布 [[attachment:WukooPy-0.11.zip]] 0.10 版发布 [[attachment:WukooPy-0.10.zip]] 支持json,请使用新新的svn版本,感觉是最简单的json发布,不是吹牛。不过可以发送中文,返回的中文编码不知怎么做,熟悉js帮一下先。 [[attachment:wukoopy_testjson.rar]] SVN下载: http://www.woodpecker.org.cn/svn/woodpecker/WukooPy/trunk/ user:woodpecker,pass:python@woodpecker.org TRAC访问: http://www.woodpecker.org.cn/trac.cgi/browser/WukooPy/trunk/ = 快速体验 = <> = 反馈 = '''有什么体验?'''