如何在Django项目中拥有2个不同的管理站点?

ken*_*der 19 django django-admin

我想在Django项目中有2个独立的管理站点.

我的意思是分开 - 他们应该有单独的用户身份验证,他们应该管理不同的模型,并具有不同的外观和URL.

我想要这样做的原因是客户需要单独的部分来管理页面的CMS部分,并分开用作"后台"解决方案.

我想在我的项目树中复制od django.contrib.auth appliaction,以不同方式命名admin.site.register()并对它们使用单独的调用.这样我可以在其中每个模型中提供其他模型,不同的外观等.我不知道如何解决用户身份验证问题(我应该有不同的用户才能登录CMS然后进入BackOffice) .

有人碰巧这样做过,可以给我一些提示吗?或者我打算做的是设计错误?

Ber*_*ant 41

您可以将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")   
Run Code Online (Sandbox Code Playgroud)

至少从1.9开始,您需要添加name参数以使其正常工作.这用于创建反向URL,因此名称必须是urls.py中的名称.

然后,您可以在应用程序中使用它,admin.py就像使用普通AdminSite实例一样:

from myproject.admin import myadmin
myadmin.register(MyModel_A)
Run Code Online (Sandbox Code Playgroud)

您还需要为它定义一些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)),
Run Code Online (Sandbox Code Playgroud)

另见:http://docs.djangoproject.com/en/dev/ref/contrib/admin/#adminsite-objects


Cla*_*ini 9

要在不同的AdminSites中注册模型,您只需要创建django.contrib.admin.sites.AdminSite的不同实例,请参阅此处.

您可以使用管理不同模型和具有不同模板的两个不同管理站点.对于身份验证和权限,您应该能够使用内置django.contrib.auth和自定义权限(希望其他人能够在这里提供更多帮助)

  • 您使用的用户应将is_staff和is_superuser字段设置为true.然后区分不同的管理员用户和他们有权访问的内容,请参阅http://docs.djangoproject.com/en/1.2/topics/auth/#permissions (3认同)