2007年10月29日
Django:更简单的实现记住密码功能
Django的设计里,Session的保存是借助Cookie的,Cookie的保存默认有两种周期,浏览器生命周期和14天周期。这两者的选择在settings.py里面的一个参数,设成True就是前者,设成False就是后者。但是,我们通常的需求是用户登录的时候可以选择是否记住登录,如果不选就是前者,如果选中,就使用后者,但是Django却没有留下这个接口。
在我以前的文章里面,是通过直接修改Django的源代码,改了它的sessionMiddleware来解决的,今天在浏览它的google group的时候,终于找到了一个比较正规的方法。其实其原理跟我那个方法是完全一样的,修改sessionMiddleware,让它在设置Cookie之前从当前的session里面读取一个值,看看是否要记住密码,从而控制生成哪一个周期的Cookie。
但是他的做法就比我要高明了,我的做法直接修改了Django的源代码,所以导致每次升级的时候会很麻烦,因为会覆盖以前的修改。但是他的做法是自己重新写了一个sessionMiddleware,基本上,这个文件应该就是直接把原来的拷了出来,然后做修改。只要在settings文件中指定这个middleware的类,让你的项目使用自己的这个就可以了。这样,系统自己的就完全被忽略掉了。
这个博客不能贴代码,需要看源代码的去我的博客堂地址吧:http://unfish.cnblogs.com
花了不少时间,走了不少弯路,多了不少Bug,总算是把理财易的Django升级到svn trunk版本了,值不值得还不知道,不过,用新的总归没什么坏处,而且,1.0已经不远了,现在做好准备也不错。首先删除原来的Django 0.96版的安装,全新安装svn trunk版,启动服务器,打开首页,出现一堆错误。首先是前面提到过的那个用来做“记住密码”密码功能的自定义的DualSessionMiddleware,它引用的页面发生了变化,SessionWrapper类已经不存在了,所以启动报错。暂时修改Settin