2010-07-08 3 views
14

장고 프로젝트 내에 2 개의 별도 관리 사이트를 갖고 싶습니다.Django 프로젝트에서 2 개의 다른 관리 사이트를 갖는 방법은 무엇입니까?

나는 별도의 사용자 인증을해야하며 다른 모델을 관리해야하며 모양과 URL이 다릅니다.

내가 원하는 이유는 고객이 별도의 섹션을 통해 페이지의 CMS 부분을 관리하고 별도로 '백 오피스'솔루션으로 사용하기를 원하기 때문입니다.

내 프로젝트 트리에서 django.contrib.auth appliaction을 복사하고 다르게 지정하고 두 가지 모두에 대해 admin.site.register() 콜을 사용한다고 생각했습니다. 이 방법을 사용하면 다른 모델을 사용할 수 있으며 각기 다른 모습을 보일 수 있습니다. 사용자 인증 문제를 해결하는 방법을 모르겠습니다 (BackOffice에 CMS에 로그인 할 수 있어야합니다) .

누구나 전에 이런 일이 있었고 어떤 힌트를 줄 수 있었습니까? 아니면 내가 의도 한 것은 설계 상으로는 잘못 되었습니까?

답변

7

다른 AdminSites의 모델을 등록하려면 단지 django.contrib.admin.sites.AdminSite의 다른 인스턴스를 생성해야합니다. see this.

서로 다른 모델을 관리하고 서로 다른 템플릿을 관리하는 두 개의 다른 관리 사이트로 이동하는 것이 좋습니다. 인증 및 권한을 위해서는 django.contrib.auth 빌드를 사용자 정의 권한으로 사용할 수 있어야합니다. 다른 사람이 여기에서 더 많은 것을 도울 수 있기를 바랍니다.

+1

에 대한 빠른 예입니다. 로그인하면 "아무 것도 수정할 수있는 권한이 없습니다."라는 메시지가 나타납니다. 메시지 ... – kender

+3

사용하는 사용자는 is_staff 및 is_superuser 필드가 true로 설정되어 있어야합니다. 그런 다음 다른 관리자와 액세스 권한을 구별 한 후 http://docs.djangoproject.com/ko/1.2/topics/auth/#permissions –

+0

확인하십시오. 알기 만하면됩니다. 하지만 나는 2 개의 관리 사이트에 대해 서로 다른 템플릿 세트를 갖고있는 것 같지 않습니다. 템플릿의 'admin /'디렉토리를 조회 할 수 있습니다. 'backoffice'인수를 사용하여 하나를 만들 수도 있습니다.이 인수는 'backoffice' '... – kender

38

당신은 하위 클래스 장고의 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에서 제대로 작동하도록 이름 매개 변수를 추가해야합니다. 이것은 반전 URL을 생성하는 데 사용되므로 이름은 urls.py의 URL이어야합니다.

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

당신은 또한 몇 가지 URL을 정의해야합니다 (프로젝트의 urls.py에) : 당신이 정상 AdminSite 예와 마찬가지로

는 그런 다음 앱의 admin.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

+0

admin 사이트 –

0

나는 내 발견, 여기에보고 된 내용은 켄더에게 도움이되었을 것입니다. 그 이유는 무엇보다도 두 곳의 관리 사이트뿐만 아니라 각각 하나씩 두 개의 데이터베이스에 대해서도 말하고 있었기 때문입니다. 그게 내 상황이야. 필자는 내 앱 중 하나 인 새로운 앱이 자체 데이터베이스와 관리 페이지를 갖기를 원한다는 생각이 듭니다.

하지만 Bernhard Vallant의 AdminSite 서브 클래 싱 방식에 문제가있어 보았지만 정통적이고 본질적으로 올바른 것으로 보입니다. 나는 그 문제를 해결했다. 여기

내가 완전히 필요하다고 발견 베른하르트 Vallant의 코드에 모드 : 그것은 아니므로

from django.contrib.admin.sites import AdminSite 
class MyAdminSite(AdminSite): 
    pass 
    #or overwrite some methods for different functionality 
myadmin = MyAdminSite(name='anything') 

예, 정말 이름은 한 (선택 = '아무것도'뜻 '관리 ').그리고 나는 그것으로 안팎을 토글했다. 그리고 아무것도 아닌 관리자 이름 지정없이 매번 실패한다.

내가 얻은 증상은 두 번째 데이터베이스를 추가하고 myadmin을 만든 다음 myadmin.register (My_ModelA)로 모델을 등록하고 두 개의 관리 응용 프로그램 페이지를 살펴 보았습니다. 두 번째 데이터베이스와 myadmin 및 My_ModelA 모델을 사용하는 새 응용 프로그램은 괜찮아 보이지만 이전 관리자 페이지에는 모델에 대한 죽은 링크가 표시되어 있었고 앱의 비간 링크 (오래된 링크를 클릭하여 오래된 데이터베이스) 페이지가 존재하지 않는다는 사실에 404 코드가 있습니다. 또한

, 나는 그것이 중요한 모르겠어요,하지만 난 베른 Vallant이 프로젝트 urlconf에서했던 것과 다른 무언가를했다 :

from django.conf.urls import patterns, include, url 
from django.contrib import admin 
admin.autodiscover() 

urlpatterns = patterns('', 
    url(r'^admin/', include('mynewapp.urls')), 
    url(r'^someword/admin/', include(admin.site.urls)), 
) 

OK "someword는"거기 --- 무관 응용 프로그램이나 프로젝트의 이름이 아니라 최종 사용자와 관련된 외모. 하지만 관련된 관리자는 내 오래된 앱과 오래된 데이터베이스를위한 것입니다. 자동 검색() 포함에 유의하십시오. Bernhard Vallant가 urlconf 프로젝트를 구성 할 때 Bernhard Vallant가 myadmin 가져 오기와 함께 기본 설정을 참조하고 기본 관리자를 참조 할 때 Bernhard Vallant가 사용하는 링크와 관련된 문서에 약간의 어색함이 있습니다.

그리고 mynewapp의 urlconf에 대한

내가 가진 :

from django.conf.urls import patterns, url, include 
from myproject.admin import myadmin 

urlpatterns = patterns('', 
    url(r'/', include(myadmin.urls)) 
) 

urlpatterns += patterns('mynewapp.views',"... url() stuff for mynewapp's views"), 
) 

'관리자'이외의 다른 내부적으로 AdminSite 인스턴스를 이름의 완전한 필요성, 나는 재즈까지 시간을 왔을 때 것을 추가해야에도 불구하고 mynewapp의 admin.py 파일에 admin.ModelAdmin 하위 클래스가 있으면 admin.ModelAdmin을 부모 클래스로 사용해야합니다. myadmin은 결국 AdminSite의 하위 클래스 인스턴스입니다. 그래서 나는 그것이 admin이 아닌 admin.site와 동등하다는 것을 모았습니다.

admin은 소문자 인 admin이 인스턴스처럼 보이고 인스턴스를 서브 클래 싱하는 것에 익숙하지 않기 때문에 나처럼 NOOB를 매우 혼란스럽게합니다. 그래서 나는 그것이 아니라고 생각합니다.

관련 문제