复制粘贴模式与过度设计

这几天在给 Simple RBAC 添加 contrib,其中有一个功能需要从用户实体类产生 named tuple 作为访问控制列表中的资源标识。因为“类”在原型链层次上的特殊性,我还需要自动将实体类的“类”所对应资源注册为实体类的“实例”所对应资源的 parent,这样我就可以很简单的结合 assertion 让一篇文章只能被它的作者或者管理员修改:

Read More

写了一个 RBAC 权限管理工具

前几天在邮件列表看到大家在说有没有好用的权限管理工具,有人说 Zend_Acl 不错。我看了下官网文档,貌似是挺不错的,用起来很方便。可惜 Zend_Acl 是 PHP 的,我于是兴起模仿它的用法,写了一个 Python 版的。

Read More

在 Flask 里产生流式响应

用过 Bottle 的同学应该不会忘记它的流式响应——在视图函数中使用 yield 关键字,让调用结果成为一个迭代器,那么 HTTP 客户端将会得到这个迭代器每次迭代的结果一部分,迭代器产生多少客户端收到多少,就像流一样。用这种方法在产生一些大的响应对象时(比如大文件下载),能有效地节约服务器内存。

运行以下代码并在浏览器访问 http://localhost/stream

Read More

控制反转 (IoC) 和依赖注入 (DI)

说来惭愧,听说控制反转(Inversion of Control)依赖注入(Dependency Injection)这两个名词已经是大二的事情了,时至今日才想明白了具体的含义。我之前知道依赖注入的用法,一直将控制反转将其等同化,现在看来二者其实还是存在差别的。于是今天就此也顺便查阅了一些资料,将一些思考记录下来。

Read More

让 Web 控制器更有条理

这里的“Web 控制器”指的的确是 MVC 中的 Controller,在 Django 等 Python Web 框架中也被称为“视图”。

说到本文,源起 Python Web 框架中对于“控制器”有两种不同的表达方法。其中一种是类似于 Rails 的 class-based,另一种是 类似于 Sinatra 的 function-based(当然 Sinatra 的实际是 block-based)。tornado、web.py 采取了前者,而 Flask、Bottle、Django 采取了后者。

在组织简单代码的时候,两种方式仅仅是风格上的区别,这时候往往 function-based 会显得更加简洁。但对于更加复杂一点的情况,class-based 的控制器有一些代码组织上的优势,可能 function-based 的需要花一些脑筋才能达到相同效果。

Read More

为什么要分的那么清楚呢?

wolf1990:

为什么要分的那么清楚呢?丰顺三汤片本来就是客家地区和潮汕地区的交接处,是客家是潮汕又怎样,我们是客家人,喜欢潮汕文化……不行么?本来我们就是一群认同潮汕风俗的客家人,有什么好讨论的……

构思文章中……

让我想起了《悲惨世界》中的一幕,花匠准备参加巷战,请求修道院的院长嬷嬷祈福。

  • 院长嬷嬷:我会为你感到遗憾的,也就是说,没有人能强迫你参加这场战争,一场内战。

  • 花匠:所有的战争都是内战,因为所有的人都是兄弟。

吐槽 Python Web 框架 Flask

Python 多到数不过来的 Web 框架已经成为了一大风景,而且不同于 PHP Frameworks 集体山寨 Rails 的风格,几乎每个 Python 框架都有自己的特色。我接触过的有 web.py、Django、Bottle、Flask ,其中属 Flask 最为我喜欢。有时候框架会被称为“轮子”,但是可以确定的一点是这四个框架一定不是轮子,我最喜欢的 Flask 有许多非常方便的特性,当然也有我想吐槽的不爽点。于是写一篇博客把吐槽记录下来。

Read More

一次笔试经历引起的反思

前不久申请了实习,今天早上刚完成了在线笔试。总体来说题目不难,但是我答题过程并不顺利,所以写下这篇文字,反思自己的不足。实习单位要求对试题保密,故我不谈及试题,只针对自己的知识疏漏总结。

Read More

事件:深圳电信再度耍流氓,劫持用户访问的站点。

结果:几次电话投诉之后,电信客服表示“针对性取消推送”。处理之后至今未被劫持。

建议:如果遇到此类情况不要沉默,而应该致电谴责这种卑鄙的做法,并维护自己的权益。