1.RequestHandler的复用
作为论坛,每个RequestHandler都需要处理下面的数据,cookie,访问平台,所以目前我抽象出来的PublicHandler代码如下:
http://github.com/benmao/v2ex/blob/9f72eb031a5395617a8955c4b984de94f0b6b1f3/handler.pyself.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-0Livid 看看哈,如果和你有共同的语言,我就继续贡献力量,如果没有共同语言,那我就放弃了,继续去研究webgame了 :)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/1265
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.