2017-01-04 5 views
0

У меня есть простой, но как-то сложный шаблон для установки. Я работаю над созданием приложения, которое в основном будет работать как белые ярлыки для нескольких клиентов. У каждого клиента должна быть своя собственная база данных с их собственной информацией. Идея заключалась бы в том, чтобы эти клиенты отправили подпись (токен или таковую) в рамках запросов или при подключении, идентифицируя их, чтобы приложение узнало, в какую базу данных получить информацию.Динамическая база данных для Django

Я читал здесь и там, что настройки не должны меняться, но мне было интересно, как это можно добиться просто?

Необходимо, чтобы супер администратор мог динамически создавать новую базу данных и для того, чтобы клиент мог получить доступ к приложению с этой конкретной базой данных без необходимости повторного развертывания приложения и не зная заранее, базы данных в настройках.

Как этого добиться?

+0

Является ли это ограничением для использования новой базы данных каждый раз? Я предпочел бы разместить все данные в одной базе данных и вызывать данные пользователем. Если у вас все в порядке, я могу записать всю архитектуру, как это может быть достигнуто. –

+0

Идея состоит в том, чтобы отделить как можно больше данных. Это вопрос безопасности в основном, данные из приложения никогда не должны быть доступны из другого, поэтому, если бы база данных была разделена, по крайней мере, это обеспечило бы это. – Linio

+0

Хорошо, это имеет смысл –

ответ

0

Я быстро поставил это вместе. Если в этом методе есть какая-то лазейка, пожалуйста, дайте мне знать (я тоже буду учиться).

В идеале вы можете иметь несколько типов user_types для обработки этого сценария, администратор может обрабатывать все данные по мере необходимости и пользователя, который может обрабатывать данные, связанные с его/ее экземплярами.

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

вы даже можете написать decorator для этого (чтобы проверить в нескольких просмотров)

urls.py

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

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

Пожалуйста, дайте мне знать, требуется ли еще какое-то разъяснение, если есть какие-либо вопросы о secur ность.

EDIT1: добавлена ​​ссылка на сайты Проверьте это: Django имеет sites функциональность. Это может помочь вам настроить отдельные настройки/базы данных для каждого экземпляра сайта.

+0

Это не отвечает вообще на мою проблему. Моя потребность состоит в том, чтобы данные были фактически в отдельных базах данных, что здесь не так. Я собираюсь проверить аспект сайтов, но на первый взгляд это, похоже, не отвечает на мою проблему. – Linio

Смежные вопросы