技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 系统架构 --> 回归简单,向Django说再见

回归简单,向Django说再见

浏览:3582次  出处信息

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

    回想起当年刚用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. 使用django+celery+RabbitMQ实现异步执行    (阅读:5078)
    2. Django 中 "Data truncated for column xxx" 解决方法    (阅读:4394)
    3. apache+mod_wsgi+django在windows下的部署    (阅读:4257)
    4. Django框架ORM操作详解    (阅读:4196)
    5. python-django的中文编码总结    (阅读:3847)
    6. django中动态生成form表单    (阅读:3583)
    7. 在dotcloud上部署Django全程记录    (阅读:3128)
    8. Django数据库访问优化    (阅读:3001)
    9. Django的静态文件服务 总结    (阅读:2666)
    10. 进程管理器supervisor的使用(django实例)    (阅读:2649)
    QQ技术交流群:445447336,欢迎加入!
    扫一扫订阅我的微信号:IT技术博客大学习
    • 作者:Dante    来源: Vimer
    • 标签: Django
    • 发布时间:2011-11-16 00:03:08
    © 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

    京ICP备15002552号-1