Other articles


  1. Tornado Prespective

    Tornado最佳实践

    最近看到很多人的开发经验. 比如ruby和rails的使用者非常喜欢传道授业解惑, 网上能看到的python的文章大多数在研究一些好玩的算法等等. 事实上python在顶级软件团队的应用程度相当普遍, 在严肃的生产环境中也十分让人放心. 只是几乎所有的python framework都不擅长宣传自己, 本人有一次一口气浏览了大部分python web框架的主页, 没有一个框架主页有视频教程. 相比rails甚至Java的play framework首页都有screencast.

    在干活方面我是一个非常不主流的人, 大家都在谈论的的rails我不用, 一心放在python的framework tornado上, 即使很多用python的人也多在使用django这些流行的框架, 但是我的tornado却越用越顺手, 几乎形成了一套最佳开发实践, 完成项目的速度连我自己都吓了一跳. 本文介绍自己的经验, 顺便对其他传言迎头痛击.

    首先, 曾经看到网上有人说, 没有ORM的框架不用也罢, 我完全不同意. tornado没有ORM, 2.x自带了一个模块database.py, 开始接触tornado的时候我想也没想就用了, 初看它是一个对mysql-python的简单包装而已, 我也对database.py存在的必要性表示过质疑. 但是慢慢我发现这个模块很好用, 也很必要. 这个模块独立于tornado, 偶尔将database.py单独拿出来放到其他的项目里, 现在已经离不开了.

    这里再多说两句, 直接使用mysql-python看似也没有多大的差别, 但是返回的数据往往都是各种object. 使用python的话我们更加习惯返回的东西是字典和列表. database.py ...

    read more
  2. No Magic Guideline

    Sun 30 September 2012
    By KJ

    In python.

    NoMagic 是一套基于 MySQL 的数据库设计规范+代码库

    参考了大神 Bret Tyalor 的文章 backchannel.org/blog/friendfeed-schemaless-mysql, 实现的也非常简单粗暴: 全部都是函数, 非常易于阅读.

    简单的讲一些特点:

    • NoMagic 涉及数据的存储和索引, 不涉及冗余. 通俗的说, MySQL 的热备份还是要自己做.
    • NoMagic 不涉及数据的计算, 愿意用粗暴的方法得到结果, 还是习惯用 MapReduce 提高性能, 是你自己的选择.
    • NoMagic 的非核心函数库, 提供了一些常规应用的快速bootstrap. 比如在数据库里创建个用户, 修改个密码, 还有SNS的一些功能比如like, comment之类的, 只是为了帮助大家减少重新发明轮子的行为.
    • NoMagic 鼓励大家阅读代码, fork代码, 修改代码, 扩展代码. 就如起名叫NoMagic, 这个框架没有魔术, 只是帮助大家在创建一个网站的时候, 能够面向未来做好可扩展的准备, 同时也不用在写代码的第一天就给自己的电脑上安装一大堆 mongodb ...
    read more
  3. How to read tornado documentation

    Sun 30 September 2012
    By KJ

    In python.

    www.tornadoweb.org/documentation/ 是 tornadoweb 唯一的官方文档, 有着独特的风格, 具体体现在代码即是文档的注释, 看不懂文档, 请看代码.

    我很喜欢这样的风格, 至少从某一点上说, tornadoweb 作者希望用户阅读他们的代码而不仅仅是使用, 不愿意创造一个神奇的黑盒. 不过 tornado 的文档也是被人诟病的主要话题.

    在各种社区看到一些初学者的提问, 现在已经没有多少人问Pylons或者TurboGears了, 新手的主要兴趣点在于Django, Flask, Web.py 和 Tornado, 谈到 Tornado, 大家都会提到文档不足需要做一些心里准备.

    回想一下 python 的文档, 其实在很多新手看来也是文档不足的例子. Python 的主要学习资料来自于docs.python.org的两个大版块, Tuturial 和 Library Reference, 所有有经验的 python 用户往往直接去看标准库 Reference, 当然他们同时会开着 python ...

    read more
  4. Function vs class

    Web.py 的影响深远, 同时代的 Django, 如今已经非常流行. 但是django之后呢? Tornado, webapp 等一系列框架已经自然的选择了web.py的进化路线.

    几年前人们在讨论web.py, 现在人们在讨论Flask, Flask 成为 python framework 中的简洁的代名词.

    这里谈一谈一个小细节, 关于framework中request handler. Tornado选择了class作为request handler, django和Flask则使用函数, 更简洁.

    我自己也强烈倾向于简洁, 能用function绝不class. 开始的那段时间我是django的忠实fans. 同一时代的Pylons和TurboGears则使用类controller.

    使用tornado之后, 我的态度有些转变. Tornado使用类controller实为必须.

    根据自己的经验, 我相信很多人有和我一样的体验: 我们尝试解决问题的时候, 总是先创建一个空白的py文件开始解决问题. 为了重用自己的代码, 我们会将代码编程函数. 函数的弱点在于很多时候中间变量状态无法保存(除非你真的很擅长FP). 于是最后我们的函数又被加上了self, 变成了class.

    Tornado内部引入了异步编程, 异步是tornado的核心, 很多中间状态需要保存. 一个request不再等同于一次函数操作.

    所以, 这里的观点是 ...

    read more
  5. Handler in Tornado Template

    在rails中使用erb的时候发现, erb无需传递任何参数, self已经被作为参数传出. 难怪玩rails的朋友都高呼rails贴心.

    Tornado很棒的技巧, 本人最近才发现.

    以前我们这样做:

    def get(self):
        self.render("template/file.html", user = self.current_user, posts = [
                {"title": "post 1", "content": "first post"},
                {"title": "post 2", "content": "second post"},
            ])
    

    我写的稍稍夸张了一点, 但是我们发现通过 handler 可以指向 controller self, 那么 render 方法就更加优雅了:

    def get(self):
        self.user = self.current_user
        self ...
    read more

Page 1 / 1

blogroll

social