V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
c
V2EX  ›  Project Babel

Project Babel 重构之建议

  •  
  •   c · 2010-08-03 10:10:07 +08:00 · 4297 次点击
    这是一个创建于 5230 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1.RequestHandler的复用

    作为论坛,每个RequestHandler都需要处理下面的数据,cookie,访问平台,所以目前我抽象出来的PublicHandler代码如下: http://github.com/benmao/v2ex/blob/9f72eb031a5395617a8955c4b984de94f0b6b1f3/handler.py

    self.os 保存了浏览平台[desktop|mobile]
    self.member 保存了用户,默认为None

    同时在handler里实现了一个requires_login的Decorator,在需要登录的get|post前面加上@requires_login即可。

    2.Model的方法

    在Django里,默认的一些查询都是在Model里实现,并且有2个很重要的装饰器,classmethod和property。

    代码见:http://github.com/benmao/v2ex/blob/4c6126a7f8202056bb3ad9c0ebd52a4ad5288c55/v2ex/babel/__init__.py

    里面实现了一个mem的Decorator,方便把查询的数据保存到Memcache。如何使用见里面Member Model 里的get_member_by_auth Method 和Node Model里的get_home_nodes_new Method.

    然后还可以重写Model的put和delete Method,达到自动管理Memchache,GAE的Memchache管理一定要在Model这个地方来弄,如果在逻辑里写,最终会很麻烦。

    3.合理使用logging

    logging是一个很方便的记录日志的工具,应该合理利用。

    4. 关于查询,最好用Query类吧。

    5.这里我重构了main.py里的SigninHandler,diff见:http://github.com/benmao/v2ex/commit/4c6126a7f8202056bb3ad9c0ebd52a4ad5288c55#diff-0

    Livid 看看哈,如果和你有共同的语言,我就继续贡献力量,如果没有共同语言,那我就放弃了,继续去研究webgame了 :)
    5 条回复    1970-01-01 08:00:00 +08:00
    c
        1
    c  
    OP
       2010-08-03 10:12:53 +08:00
    @Livid 提供开发GAE的能力,最简单的办法,看GAE的代码吧 :)
    c
        2
    c  
    OP
       2010-08-03 10:15:37 +08:00
    根据我初步估计,按照上面办法重构,需要1-3天,代码量至少减少30%。
    c
        3
    c  
    OP
       2010-08-03 10:33:48 +08:00
    Leo
        4
    Leo  
       2010-08-03 11:35:56 +08:00
    Lz也是神级人物..一句都看不懂- -'
    sospartan
        5
    sospartan  
       2010-08-03 13:39:10 +08:00
    这些都是好东西
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3781 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 10:38 · PVG 18:38 · LAX 02:38 · JFK 05:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.