子非鱼,安知鱼之乐?

我的程序人生,累并快乐着。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

修改了一下Django的源码

Posted on 2006-12-01 10:02  Jason Cui  阅读(976)  评论(26编辑  收藏  举报

通常系统的要求,最简单的登录部分,通常都会有一个记住密码的功能,而像豆瓣这样的网站,会自动记住密码,并没有给用户选择的机会。不过一来它的丢失密码也不会造成太大的损失,二来我不知道它是不是使用了Django框架,所以不好说。但是以后如果他想做在线销售,这个问题是肯定要解决的。

在Django的实现里,由配置文件中的一个配置来决定是否启用记住密码功能,而且默认是启用的,如果改了这个配置,就变成浏览器生命周期的Cookie,但是这样的话,就没有办法做记住密码的功能了,只能在两者中间选一个。

后来考虑了网上的一篇文章,在Django的目录下,contrib/sessions/下面有个middleware.py,这就是session的实现过程。在它的processresponse里面,有一个判断,如果这个配置为浏览器生命周期,就会写一个expired为None的Cookie到客户端,否则,写一个过期时间为两周的Cookie。

为了最简化修改过程(因为它很快就会出1.0版本了,到时候恐怕又要改一次),做了一个偷懒的修改:直接在这里取session里面的'issaved'变量的值,如果是True,同样会保存两周的Cookie,否则,用默认情况。然后在用户登录的时候,如果用户选了这个框,就在session里面添加一个为True的这个变量,一切OK,只要改三行代码。不过麻烦的是每次更新django都要修改,而且每次迁移服务器环境也要改,忘记一次就麻烦了,这个记住密码就会失灵。