Django动态切换数据库

标签 django

我想在用户登录时切换数据库。我已经创建了这个登录信号..但它不起作用

from django.dispatch import receiver
from django.contrib.auth.signals import user_logged_in
from django.db import connections

@receiver(user_logged_in)
def db_switch(sender, **kwargs):
    user_db = 'userdb_%s' % kwargs['user'].username
    cursor = connections[user_db].cursor()

数据库在settings.py中定义。我必须使这个光标全局化吗?或者这是完全错误的做法?

谢谢!

最佳答案

这是错误的做法。

老实说,我认为 Django 中没有一种简单、稳定的方法可以做到这一点。它只是不是为此而设计的。

相反,我会为每个用户设置一个settings_username.py 文件,该文件指定一个名为“个人”或其他名称的辅助数据库。然后,在登录后,让他们重定向到一个新域,例如用户名.example.com,它使用一个独特的.wsgi文件来提取设置用户名.py 文件。

现在,就系统而言,每个网站对于该用户来说都是完全独立且唯一的。只需确保将 session cookie 设置为 example.com,以便他们在访问其用户网站时仍然处于登录状态。

关于Django动态切换数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9908186/

相关文章:

python - 使用 Elasticsearch 后端在 Django Haystack 中启用同义词

Python JSON 提取

django - 如何使用 Django South 为现有应用程序创建新数据库并设置默认值?

django - 如何根据反向外键相关模型的字段过滤QuerySet?

python - 如何在mongoengine python中聚合组

python - Django split Models in différents models.py 文件给我导入循环

python - Django相关模型未更新管理中的相关对象

django.db.utils.ProgrammingError : type "raster" does not exist

python - 同步数据库时我应该使用什么密码?

python - 在继承类中扩展 wagtail Streamfields