Django动态数据库

Django动态数据库,django,Django,我有一个简单但复杂的模式要建立。我正在创建一个应用程序,该应用程序基本上需要作为几个客户的白标签。 每个客户都应该有自己的数据库和自己的信息。 这样做的目的是让这些客户在请求中或连接时发送签名(令牌等),识别他们,以便应用程序知道从哪个数据库获取信息 我在这里和那里读到不应该改变设置,但我想知道如何简单地实现这一点 超级管理员需要能够动态创建新数据库,客户需要能够使用此特定数据库访问应用程序,而无需完全重新部署应用程序,也无需事先知道设置中的数据库名称 我们应该如何做到这一点呢?我很快就把这些放

我有一个简单但复杂的模式要建立。我正在创建一个应用程序,该应用程序基本上需要作为几个客户的白标签。 每个客户都应该有自己的数据库和自己的信息。 这样做的目的是让这些客户在请求中或连接时发送签名(令牌等),识别他们,以便应用程序知道从哪个数据库获取信息

我在这里和那里读到不应该改变设置,但我想知道如何简单地实现这一点

超级管理员需要能够动态创建新数据库,客户需要能够使用此特定数据库访问应用程序,而无需完全重新部署应用程序,也无需事先知道设置中的数据库名称


我们应该如何做到这一点呢?

我很快就把这些放在了一起。如果这个方法有任何漏洞,请让我知道(我也会知道)

理想情况下,您可以有多种用户类型来处理此场景,管理员可以在需要时处理所有数据,用户可以处理与其实例相关的数据

型号.py

class UserModel(BaseUser):
   # fields related to user details that are not already present in BaseUser
   USER_TYPES = (
                  ("A","Admin"),
                  ("U","User"),
                )
   type = models.CharField(max_length=2, choices=USER_TYPES, default="U")

class AppModel(models.Model):
    # fields related to the model
    field = models.CharField(max_length=255)
    user = models.ForeignKey(UserModel)
def access_data(request, data_id):
    data = AppModel.objects.get(pk=data_id)
    if data.user == request.user:
        #do some thing with the data
    else:
        ## Forbidden request
        return redirect( "403-Error") 
from django.conf.urls import url
from . import views

urlpatterns = [
   url(r'^access_data/(\d+)$', views.access_data, name='access_data'),
]
在视图中,我们可以检查AppModel实例用户和登录用户(来自请求)

视图.py

class UserModel(BaseUser):
   # fields related to user details that are not already present in BaseUser
   USER_TYPES = (
                  ("A","Admin"),
                  ("U","User"),
                )
   type = models.CharField(max_length=2, choices=USER_TYPES, default="U")

class AppModel(models.Model):
    # fields related to the model
    field = models.CharField(max_length=255)
    user = models.ForeignKey(UserModel)
def access_data(request, data_id):
    data = AppModel.objects.get(pk=data_id)
    if data.user == request.user:
        #do some thing with the data
    else:
        ## Forbidden request
        return redirect( "403-Error") 
from django.conf.urls import url
from . import views

urlpatterns = [
   url(r'^access_data/(\d+)$', views.access_data, name='access_data'),
]
您甚至可以为此编写一个脚本(以签入多个视图)

url.py

class UserModel(BaseUser):
   # fields related to user details that are not already present in BaseUser
   USER_TYPES = (
                  ("A","Admin"),
                  ("U","User"),
                )
   type = models.CharField(max_length=2, choices=USER_TYPES, default="U")

class AppModel(models.Model):
    # fields related to the model
    field = models.CharField(max_length=255)
    user = models.ForeignKey(UserModel)
def access_data(request, data_id):
    data = AppModel.objects.get(pk=data_id)
    if data.user == request.user:
        #do some thing with the data
    else:
        ## Forbidden request
        return redirect( "403-Error") 
from django.conf.urls import url
from . import views

urlpatterns = [
   url(r'^access_data/(\d+)$', views.access_data, name='access_data'),
]
如果对安全性有任何疑问,请告诉我是否需要进一步澄清

EDIT1:添加到站点的链接
看看这个:Django有很多功能。这可以帮助您为站点的每个实例设置单独的设置/数据库。

每次使用新数据库是否有限制?我宁愿将所有数据放在同一个数据库中,并按用户调用数据。如果你对此没意见,我可以写下如何实现这一点的整个体系结构想法是尽可能多地分离数据。这主要是一个安全问题,一个应用程序中的数据永远不应该从另一个应用程序中访问,因此,如果数据库被分离,至少可以确保这一点。好吧,这是有道理的。这根本不能回答我的问题。我需要的是将数据实际放在单独的数据库中,这里不是这样。我将检查网站方面,但乍一看,它似乎也不能回答我的问题。