Как иметь 2 различных администраторских сайта в проекте Django?

Я хочу иметь 2 отдельных администраторских сайта в проекте Django.

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

Причиной я хочу сделать это, является клиент, хочет, чтобы отдельный участок администрировал часть CMS страницы, и отдельный для использования в качестве решения 'бэк-офиса'.

Я думал о просто создании передозировки копии django.contrib.auth приложение в своем дереве проекта, именование его по-другому и использующий отдельный admin.site.register() призывы к ним обоим. Таким образом, я могу иметь другие модели в наличии в каждом из них, различных взглядов, и т.д. Я не знаю, как решить проблему аутентификации пользователя (у меня должен быть другой пользователь, чтобы смочь войти в CMS затем в BackOffice).

Кто-либо, оказалось, сделал это прежде и мог дать мне некоторую подсказку? Или то, что я планирую сделать, просто неправильно дизайном?

19
задан kender 8 July 2010 в 18:40
поделиться

2 ответа

Чтобы зарегистрировать модели на разных AdminSites, вам просто нужно создать разные экземпляры django.contrib.admin.sites.AdminSite , см. Это.

Вам будет удобно использовать два разных административных сайта, управляющих разными моделями и имеющих разные шаблоны. Для аутентификации и разрешений вы должны иметь возможность использовать встроенный django.contrib.auth как есть с настраиваемыми разрешениями (надеюсь, кто-то еще сможет помочь здесь больше)

9
ответ дан 30 November 2019 в 02:38
поделиться

Вы можете создать подкласс Django AdminSite (поместите его, например, в admin.py в корне вашего проекта):

from django.contrib.admin.sites import AdminSite

class MyAdminSite(AdminSite):
    pass
    #or overwrite some methods for different functionality

myadmin = MyAdminSite(name="myadmin")   

По крайней мере, начиная с версии 1.9. вам нужно добавить параметр name, чтобы он работал правильно. Это используется для создания обратных URL-адресов, поэтому имя должно быть из urls.py.

Затем вы можете использовать его в admin.py своего приложения так же, как и в обычном экземпляре AdminSite :

from myproject.admin import myadmin
myadmin.register(MyModel_A)

Вам также необходимо определить для него некоторые URL-адреса. (в urls.py вашего проекта):

from myproject.admin import admin, user_site
from myproject.admin import myadmin
urlpatterns = patterns('',
    ...
    (r'^admin/', include(admin.site.urls)),
    (r'^myadmin/', include(myadmin.urls)),

Также см. это: http://docs.djangoproject.com/en/dev/ref/contrib/admin/#adminsite-objects

41
ответ дан 30 November 2019 в 02:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: