运行不同的Django版本但共享身份验证

时间:2010-01-07 17:18:29

标签: python django mod-python

全新的django。我们有一个使用django 0.96x的传统django项目,它执行身份验证,ldap等,而且它非常复杂,因此我们不想重写该代码。

我们想添加一个论坛解决方案(现成的),但到目前为止我所看到的所有解决方案都需要django 1.x

我正在试图弄清楚如何使这个工作,我已将其缩小到以下几点:

  1. 使用与django 0.96有效的旧论坛解决方案(这是否存在?)
  2. 尝试修补论坛解决方案,使其“向后兼容”0.96(可能是噩梦)
  3. 使用两个不同的djangos:0.96和1.x和(因为我们使用Apache w / mod_python)有两个不同的Location指令;适当调整PYTHONPATH(或使用virtualenv等)
  4. 但是选项#3会起作用吗?我不太了解django.contrib.auth和朋友是如何工作的,所以如果我运行两个不同版本的django,用户是否会保持登录状态?我没有提到试图修补我们的0.96项目将它带到1.x但是我们没有时间去做。

    有什么建议吗?

3 个答案:

答案 0 :(得分:1)

这是可能的,但选择#3可能会非常痛苦。

选项4怎么样:咬紧牙关并升级到Django 1.1.1。我用几个0.97pre网站做了这个,花的时间比我想象的要少。最大的痛苦是处理管理员的事情。我们只是将Admin类直接放在Model类下面而不是单独的admin.py文件。

我使用Mercurial作为我的DVCS,我只是克隆,黑客攻击,合并并且有效。每个站点花了大约3-5个小时,其中包括一些自定义模板标签。

答案 1 :(得分:0)

使用会话存储用户的登录状态。从比较中继到0.96源可以看出,会话以相同的方式提交给cookie,auth以相同的方式存储用户ID和后端,因此只要这两个应用使用相同的会话存储和在同一个域上,它应该工作。 (为了安全起见,我不会使用安全cookie,以防后端逻辑发生变化 - 我没有查看该部分。)

然而,0.96没有像现代Django那样的可插拔会话商店。可能,为了使当前版本的Django能够与你的0.96个会话一起工作,你需要为当前连接到0.96数据库并在那里操作会话的Django编写一个会话后端。不过,我不确定这会有多好。

答案 2 :(得分:0)

可以将Django 0.96表暴露给1.1 - 您可以使用围绕数据库VIEW的非托管模型。换句话说,你发出:

从django096db.auth_user创建视图auth_user AS SELECT *; (和其他表格类似的cmd)

然后你让Django 1.1与0.96同步(假设0.96表与1.1兼容,我没有检查过。)