Я хочу иметь 2 отдельных администраторских сайта в проекте Django.
Отдельным я имею в виду - у них должна быть аутентификация отдельных пользователей, они должны администрировать различные модели и иметь различные взгляды и URL.
Причиной я хочу сделать это, является клиент, хочет, чтобы отдельный участок администрировал часть CMS страницы, и отдельный для использования в качестве решения 'бэк-офиса'.
Я думал о просто создании передозировки копии django.contrib.auth приложение в своем дереве проекта, именование его по-другому и использующий отдельный admin.site.register()
призывы к ним обоим. Таким образом, я могу иметь другие модели в наличии в каждом из них, различных взглядов, и т.д. Я не знаю, как решить проблему аутентификации пользователя (у меня должен быть другой пользователь, чтобы смочь войти в CMS затем в BackOffice).
Кто-либо, оказалось, сделал это прежде и мог дать мне некоторую подсказку? Или то, что я планирую сделать, просто неправильно дизайном?
Чтобы зарегистрировать модели на разных AdminSites, вам просто нужно создать разные экземпляры django.contrib.admin.sites.AdminSite , см. Это.
Вам будет удобно использовать два разных административных сайта, управляющих разными моделями и имеющих разные шаблоны. Для аутентификации и разрешений вы должны иметь возможность использовать встроенный django.contrib.auth как есть с настраиваемыми разрешениями (надеюсь, кто-то еще сможет помочь здесь больше)
Вы можете создать подкласс 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