2017-01-04 8 views
0

私はシンプルでありながら幾分複雑なパターンを用意しています。私は基本的にいくつかの顧客のための白いラベルとして動作する必要があるアプリケーションを作成するために取り組んでいます。 各顧客は、独自の情報を持つ独自のデータベースを持つ必要があります。 これらの顧客は、リクエスト内または接続中に署名(トークンなど)を送信して、アプリケーションがどのデータベースから情報を取得するかを知ることができるように識別することが考えられます。Django用の動的データベース

ここでは設定を変更しないでくださいが、これを簡単に達成する方法は不思議でしたか?

スーパー管理者は、新しいデータベースを動的に作成し、顧客がこの特定のデータベースを使用してアプリにアクセスできるようにする必要があります。アプリを完全に再デプロイしたり、データベースを設定します。

どのようにこれを達成する必要がありますか?

+0

毎回新しいデータベースを使用するのは制約ですか?むしろすべてのデータを同じデータベースに入れて、ユーザーがデータを呼び出すことになります。あなたがこれでうまくいけば、私はこれがどのように達成できるのか全体のアーキテクチャを書くことができます –

+0

アイデアは可能な限りデータを分離することです。ほとんどの場合、セキュリティの問題です。アプリからのデータに他のデータベースからアクセスすることは決してないようにしてください。 – Linio

+0

さて、意味があります –

答えて

0

私はすぐにこれをまとめました。この方法に抜け穴がある場合は、私にも分かります(私も学ぶでしょう)。

理想的には、このシナリオを処理する複数のuser_typを持つことができ、必要に応じて管理者がすべてのデータを処理でき、インスタンスに関連するデータを処理できるユーザーができます。

ビューでmodels.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) 

は、我々はのAppModelインスタンス・ユーザーを確認することができますし、(つまり、リクエストから来て)ログインしているユーザー。

views.py

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") 

あなたも(複数のビューで確認すること)

urls.py

from django.conf.urls import url 
from . import views 

urlpatterns = [ 
    url(r'^access_data/(\d+)$', views.access_data, name='access_data'), 
] 

このためdecoratorを書くことができ、私を聞かせてください秘密に関する質問があれば、もっと明確にする必要があるかどうかを知るity。

EDIT1:サイトへのリンクを追加 チェックこのアウト:Djangoはsites機能を備えています。これは、サイトのインスタンスごとに個別の設定/データベースを設定するのに役立ちます。

+0

私の問題では全く答えられません。私の必要性は、実際には別のデータベースにデータを格納することです。私はサイトの側面をチェックするつもりですが、一見すると自分の問題にも答えないようです。 – Linio

関連する問題