我想在用户登录时切换数据库。我已经创建了这个登录信号..但它不起作用
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/