回归简单,向Django说再见
我这几天在微博上写了一句话: 回归简单,即便开始反而会变得更加复杂。
回想起当年刚用Django写素材管理系统还历历在目,最近却已经逐渐脱离Django了。
成长总是分阶段的吧,勇敢的抛弃一些东西,接纳新的东西,也许就是成长了。
至于原因呢,也是我一直在总结的,大家可以一起看一下。
Django适合做中型项目,但却不适合小型和大型项目
为什么这么说呢?
我可能不需要session,我也不需要数据库,但是我却要为Django那些繁琐的东西配置半天。当我被这些繁琐而无用的东西搞晕的时候,我感觉更像是在搭积木,而不是在创造一个伟大的东西。
由于工作的关系,在大型项目中,有一类不得不说的服务,那就是SNS应用。
SNS应用的特点是什么?注册用户量极大,活跃很少。大批的用户蜂拥进入可能只是看一眼就再没回来,但是你的数据却因为这些无用的用户变得庞大无比。进而导致Django默认的那些Model,admin全部都形同虚设,Django的那些所谓的优势荡然无存。
这可是说是Django的定位,也可以说是Django的尴尬,所以必然要有其他框架来弥补这些缺陷。
所以我在很早便开始了尝试:
web.py,Flask,都用了一下,感觉还是不够简单,而终于,我发现了bottle。
bottle真的是个非常小巧的框架,只有一个文件,3000多行,代码我也基本上都读了一遍。
ORM我选用了简单的autumn,因为并不会用到复杂的关系数据。
模板使用 jinja2,本身贴近django模板的语法,用起来也很熟悉。
form类使用 WTForms。
一切看起来都很美好,似乎该有的功能都有了,但是如果真的如此简单,就不会有文章开头那段话了。
要使他们协作起来是件麻烦的事情,最麻烦的就是unicode的问题。
本着输入的最开始就要转成unicode,输出之前才转成bytes的原则,在使用这些类的时候有一下几点要遵循:
1 2 3 4 5 6 7 8 9 |
autumn_db.conn.connect( DATABASE['engine'], db=DATABASE['db'], user=DATABASE['user'], passwd=DATABASE['passwd'], host=DATABASE['host'], port=DATABASE['port'], use_unicode=True ) |
1 2 3 |
#Add-Begin by dantezhu in 2011-11-14 12:17:10 values = [it.encode('utf8') if isinstance(it, unicode) else it for it in values] #Add-End |
OK,到此为止大功告成!
所有的组件都是我们可拆卸的,如果网站够简单,可以只有一个bottle;如果网站太复杂,我们可以任意的添加自己需要的模块,而且它们是真正做事的。
建议继续学习:
- 使用django+celery+RabbitMQ实现异步执行 (阅读:5005)
- Django 中 "Data truncated for column xxx" 解决方法 (阅读:4320)
- apache+mod_wsgi+django在windows下的部署 (阅读:4123)
- Django框架ORM操作详解 (阅读:4082)
- python-django的中文编码总结 (阅读:3760)
- django中动态生成form表单 (阅读:3513)
- 在dotcloud上部署Django全程记录 (阅读:3051)
- Django数据库访问优化 (阅读:2889)
- Django的静态文件服务 总结 (阅读:2592)
- 进程管理器supervisor的使用(django实例) (阅读:2531)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:Dante 来源: Vimer
- 标签: Django
- 发布时间:2011-11-16 00:03:08
- [68] Go Reflect 性能
- [68] 如何拿下简短的域名
- [67] Oracle MTS模式下 进程地址与会话信
- [62] IOS安全–浅谈关于IOS加固的几种方法
- [61] 图书馆的世界纪录
- [60] 【社会化设计】自我(self)部分――欢迎区
- [58] android 开发入门
- [56] 视觉调整-设计师 vs. 逻辑
- [49] 给自己的字体课(一)——英文字体基础
- [48] 读书笔记-壹百度:百度十年千倍的29条法则