设为首页 收藏本站
查看: 640|回复: 0

[经验分享] Django On Python

[复制链接]

尚未签到

发表于 2015-4-24 05:59:51 | 显示全部楼层 |阅读模式
  本来打算新网站用Ruby on Rails来开发的,结果偶尔看了一篇性能评测,http://wiki.rubyonrails.com/rails/pages/Framework+...,比较了Symfony on PHP,Rails on Ruby,Django on Python三种组合的性能,结合Mysql数据库。结果比较让人吃惊,ROR的性能是PHP的一倍,Django的性能是ROR的一倍。虽然PHP声称框架本身没有问题,是它所使用的那个ORM组件的性能问题,但是,问题就是问题。而且,另外这两套东西所有的组件都是自己的,没得赖,所以,三思之下,放弃了研究了两个星期的ROR,等它再发展一年提高一下性能再说吧。
  Django的实现方式跟ROR是比较像的,但是缺少一些方便的地方,比较那么多generate脚本,还有明确的controller,model目录,还有自动的Test,以及Test的时候的数据库维护。
  Django基于一个Project作为一个网站,一个App作为其中的一个目录来使用,虽然作者声称这种方式可以让你的App随意插入到另外一个Project里面去使用,但是据我感觉,这个很难做到。除非你的App不涉及任何跟Project相关的东西,比如Session。
  每个App有自己的Model和View,它的View跟ROR的View不同,它的View其实是Controller。在Model中定义了表结构以后,在Project的Setting里加入这个App的名字,就可以自动生成对应的表结构。目前它的Model还有几个小问题,One-To-One的实现方式在官方网站上提醒即将发生改变,所以尽量不要用。Many-To-Many的实现跟ROR基本一致,但是它的中间表不是用另外两个表的外键做联合主键,而是增加了一个自动增长的id,通常,这个id是绝对没有用处的。不过由于它本身不支持多字段主键,恐怕目前也没有别的办法了。Django没有数据库连接池,但是看到网上另一篇文章说已经有另一套Python的ORM实现了连接池,目前正在作django的整合工作。也许将来,django的性能还可以再上一个台阶。
  第一次使用django的时候,中文乱码的问题一直没搞定,当时用的是ubuntu 6.06 server,这次开发改成了Hiweed 1.0,结果使用的时候就一点问题都没有了,代码里面已经都考虑了数据库UTF-8的问题。django默认的数据库不是mysql,而是postgresql。不过这个数据库我也没装成功,在ubuntu上有很多权限问题。还有看网上的示例代码的时候,代码中出现中文的话,顶上都要加上#coding=utf-8,但是我实际使用的时候不加似乎也没关系。开发工具是eclipse+pydev,整个环境不如RadRails方便,不过有代码提示功能,相当不容易。
  实际开发的过程中,需要不停的在Google上查,谁让自己没有Python的底子呢。官方站上的Document基本上都看了一篇,功能还是相当强劲的。Django自己带了一个Amdin,还有User管理,不过看起来应该是个鸡肋。当然了,如果你做的是一个内部使用的文档管理或者联系人管理,或者是一个对外的新闻系统,用用倒是不错的,但是如果开发用户相关的网站,就不灵了,代码还是要自己写。
  自带了很多方便的功能,但是我也放弃了很多,比如自动生成并维护Form的代码,如果改用Ajax,就一点也用不上了,包括数据验证。ROR自带了Ajax的支持,但是Django却还没有,只好自己拿Prototype写了。还好,不算太难。没有单元测试(最新的SVN版是有的),但是可以进入命令行调用所有的Model和方法,会有详细的错误提示,也还不至于出现错误的时候没得调试。
  django似乎没有执行Update的方法,Delete也只能Get出对象以后再调用,这样子如果是指更新或者删除就比较麻烦了。还好,它留了取Connection的接口,取出Connection以后就可以自己执行任何Sql语句了,可以弥补一些不足。
  还有一个很奇怪的设定,每一个Action都需要在Urls文件中加一行对应的定义,目前还不知道能不能使用正则表达式来统一定义,但是没有在文档中看到。这样子每增加一个东西都要去改一次,有点麻烦,而且如果地址很多,每次都要去查询这一套正则表达式,岂不是很费时?看来,作者似乎没打算让人们用它来开发大型应用。单一的应用可能比较容易一些。
  目前版本是0.95,已经离1.0不远了,而且整个项目本身就是从一个大型报纸网站的应用上抽象出来的,所以实际的可靠性和性能应该都不是问题。这也是我选择它的一个理由,至少它可以用成熟的apache+mod_python作为服务器,这样比起Apache作Proxy,轮询给后台的十个Mongrel服务器要漂亮的多了。而且,Python上面成熟的模块比Ruby多许多,用起来要方便一些,比如处理图片的PIL。
  按照程序员修炼之道的说法,程序员应该每年至少学习一门新的语言,今年就是Python了。等明年再学Ruby吧。原来豆瓣网选择Python也是有相当慎重的理由的。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-60032-1-1.html 上篇帖子: python与FTP 下篇帖子: python的md5和sha1加密
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表