我最早接触Django是在2005年底。当时,我对web开发产生了强烈的兴趣,一心想快速实现几个脑海里关于web的idea。由于一直做软件开发,对web开发毫无概念,所以第一个面临的问题就是选择framework。
基于java的web framework复杂度太高,不适合做快速开发。asp不跨平台,php听说项目大了管理不方便(现在看来,应该也是不错的)。不是很习惯ruby的语法,放弃了ror。由于久闻python语法的简洁和库的成熟,我就定格在python based framework - django,官方的介绍是: Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design.。
即使是面对从未用过python的我来说,django上手也非常容易。django提供了大量的shortcut scripts,包括:用django-admin.py来生成项目,manage.py来管理项目。自动生成的settings.py一目了然。 urls.py也是简单易懂。实际上,django-admin.py startproject xxx, Hello World的server就可以run起来了,这对新手来说感觉非常好。
django采用MVT模型,就是Model, Template, View。Model是OR Mapping的实现,对应的数据库的表结构。虽然,很多人指责django的ORM效率不高,但是用过的人都明白它实在是太方便了。django同样提供了执行raw sql的方法解决你性能问题。Template就是html模板支持继承,if, for,等等简单的语法。模板让应用逻辑和展现分离。很多时候你发现只要修改html的模板就可以,根本不需要修改python代码,不需要reload server。View是对应呈现给浏览器的response,通过views.py上的函数render模板实现。用MTV这种pattern来开发 web,真的让我感觉非常舒服。
除此以外,django还有不少亮点。基于regular expression的url配置(urls.py)。大量好用的middleware(authentication, session, transaction, cache, gzip)。模板可以自定义tag和filter。大量的utils和addons,例如:textile, rss generator。
当然,django也不是十全十美的。还是有一些鸡肋的设计,比如authentication的User, Group等结构,过于复杂,产生大量冗余表。newform我也用的不多。send_mail没有参数化,content type和encode都不够灵活。模板escape的向后兼容性。当然这些问题都可以通过一些技巧,或者自己实现来替换调,不算太大的问题。
应livid之约,胡言乱语几句django的开发心得,希望抛砖引玉,大家多多交流。至今,我已经用django开发了3个相对完整的网站,并且还希望继续的做下去。不过,django最近脚步很慢,希望1.0 milestone早点到来。最后,感谢我的django领路人limodou,他说当我的技术支持,真的说到做到,非常感谢。
Reference
Django
http://www.djangoproject.com/
Django Step by Step
http://www.woodpecker.org.cn/obp/django/django-stepbystep/newtest/doc
Django Book
http://www.djangobook.com/
Django Master Class
http://toys.jacobian.org/presentations/2007/oscon/tutorial/
Django Snippets
http://www.djangosnippets.org/