IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

回归简单,向Django说再见

Vimer 2011-11-16 00:03:08 累计浏览 4,512 次
本机暂存

    我这几天在微博上写了一句话: 回归简单,即便开始反而会变得更加复杂

    回想起当年刚用Django写素材管理系统还历历在目,最近却已经逐渐脱离Django了。

     成长总是分阶段的吧,勇敢的抛弃一些东西,接纳新的东西,也许就是成长了。

    至于原因呢,也是我一直在总结的,大家可以一起看一下。

    Django适合做中型项目,但却不适合小型和大型项目

     为什么这么说呢?

  • 对于中型项目来说,Django可以说提供了你需要用到的一切,session,orm,admin等等,只要你按照Django规定的思路来,你会发现开发和维护是如此顺手。
  • 但是如果是小型项目呢?

         我可能不需要session,我也不需要数据库,但是我却要为Django那些繁琐的东西配置半天。当我被这些繁琐而无用的东西搞晕的时候,我感觉更像是在搭积木,而不是在创造一个伟大的东西。

  • 而对于大型项目来说,Django默认带的组件又满足不了需求,甚至连架构都可能要被替换,所以Django所自带的很多特性都将无法使用。

        由于工作的关系,在大型项目中,有一类不得不说的服务,那就是SNS应用。

         SNS应用的特点是什么?注册用户量极大,活跃很少。大批的用户蜂拥进入可能只是看一眼就再没回来,但是你的数据却因为这些无用的用户变得庞大无比。进而导致Django默认的那些Model,admin全部都形同虚设,Django的那些所谓的优势荡然无存。

  •      这可是说是Django的定位,也可以说是Django的尴尬,所以必然要有其他框架来弥补这些缺陷。

        所以我在很早便开始了尝试:

  • web框架
  •      web.py,Flask,都用了一下,感觉还是不够简单,而终于,我发现了bottle

         bottle真的是个非常小巧的框架,只有一个文件,3000多行,代码我也基本上都读了一遍。

  • ORM
  •      ORM我选用了简单的autumn,因为并不会用到复杂的关系数据。

  • 模板
  •      模板使用 jinja2,本身贴近django模板的语法,用起来也很熟悉。

  • form类
  •      form类使用 WTForms

        一切看起来都很美好,似乎该有的功能都有了,但是如果真的如此简单,就不会有文章开头那段话了。

         要使他们协作起来是件麻烦的事情,最麻烦的就是unicode的问题。

         本着输入的最开始就要转成unicode,输出之前才转成bytes的原则,在使用这些类的时候有一下几点要遵循:

  • autumn在连接MySQL的时候,一定要用 use_unicode=True,这样从MySQL获取的数据才默认是unicode的
  • 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
    )
  • 使用WTForms的时候,要使用 form = RegForm(obj=request.forms) 的方式(bottle要使用0.10),这样才能form的数据才会默认就是unicode
  • autumn的Model传入的参数必须是unicode,而仅仅如此还是不行的,由于MySQLdb的bug(我个人认为),要求excute函数传入的values必须是bytes类型,所以我们要改一下autumn的代码,在query.py的190行增加代码:
  • 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;如果网站太复杂,我们可以任意的添加自己需要的模块,而且它们是真正做事的。

    同分类推荐文章

    1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
    2. Go 实验特性详解 (2026-06-21 10:05:27)
    3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

    查看更多 后端 文章 →

    建议继续学习

    1. 用Hyer来进行网站的抓取 (累计阅读 158,251)
    2. 配置Nginx+uwsgi更方便地部署python应用 (累计阅读 107,164)
    3. 程序员技术练级攻略 (累计阅读 35,471)
    4. python实现自动登录discuz论坛 (累计阅读 32,834)
    5. python编程细节──遍历dict的两种方法比较 (累计阅读 20,371)
    6. 每个程序员都应该学习使用Python或Ruby (累计阅读 17,918)
    7. Chrome和goagent的配置方法,你懂的 (累计阅读 16,843)
    8. 30分钟3300%性能提升――python+memcached网页优化小记 (累计阅读 13,742)
    9. 使用python爬虫抓站的一些技巧总结:进阶篇 (累计阅读 13,301)
    10. 我的PHP,Python和Ruby之路 (累计阅读 13,147)