2011-06-13 4 views
2

장고 웹 사이트를 쓰고 있습니다. 거의 업데이트 전용 사이트이지만 일부 업데이트 작업을 수행하는 관리자는 예외입니다. 관리자가 프런트 엔드를 통해 사이트를 수정하고 싶습니다.기본 읽기 전용 장고 웹 사이트에서 관리자 전용 페이지 및 관리자 별보기를 가장 효과적으로 구현하려면 어떻게해야합니까?

지원하려면 일부 URL이 관리자 용으로 다르게 표시되고 일부 URL은 로그인 한 관리자가 요청하지 않는 한 404를 반환해야합니다.

익명 사용자에게 특히 명백한 관리자 사용자의 존재를 원하지 않으므로 사용자가 아직 관리자로 로그인하지 않은 경우 관리자 전용 페이지에 대한 404를 작성하십시오.

현재이에 대한 나의 디자인은 다음과 같습니다

  • admin.example.com
  • :

    서버 수준에서
    1. 는 동일한 단일 장고 사이트에 대한 별칭으로 두 개의 호스트 이름을

    2. www.example.com
  • 장고 앱 수준에서 ' 관리자 전용으로 표시되거나 요청자의 호스트 이름이 admin인지 확인하십시오. 이 경우 : 요청이 로그인 한 관리자에서 오는 경우

    • ,
    • 그렇지 않으면 관리자가 특정 디스플레이 페이지를 반환
  • (404)는 그 관리자 URL을 가지고 돌아 수동으로 로그인 할 수 있습니다.

  • 이 멍청한가요? 이 작업을 수행하는 더 간단하고 나은 방법이 누락 되었습니까?

    답변

    3

    당신은 당신의 관리자 특정 뷰에 user_passes_test 장식을 사용할 수 있습니다

    def some_view(request): 
        if request.user.is_superuser: 
         render_to_response('admin_template.html') 
        else: 
         render_to_response('template.html') 
    

    전체 하위 도메인 만들기 이 단계는 매우 복잡합니다. Django의 모든 클래스와 함수가 반드시 요청 객체에 액세스 할 수있는 것은 아니며, 따라서 요청이 어느 도메인에서 왔는지도 알 수 없기 때문입니다.

    1

    포인트 1을 삭제할 수 있습니다. 장고 응용 프로그램 수준에서

    1. 는 관리자 전용의 또는 관리자가 다르게 표시되는 모든 뷰에 대한 요청은 로그인 한 관리자에서 오는 있는지 확인합니다. 요청이 로그인 한 관리자에서 오는 경우

      • ,
    2. (404)는 관리자가 수동에 갈 수있는 URL을 반환, 관리자가 특정 디스플레이 그렇지 않으면
    3. 있는 페이지를 반환 로그인.

      @user_passes_test(lambda u: u.is_superuser) 
      def only_admins_here(request): 
          #do stuff 
      

      또는 당신은 단순히보기에서 분기 할 수 있습니다 : 가장 간단한 수준에서

    +0

    물론이 두 수표에는 큰 차이가없는 것 같습니다. –

    +1

    @ Paul D. Waite 두 가지를 제외하고 하나의 수표 만 사용할 수 있습니다. :-) 먼저 호스트 이름을 확인한 다음, 사용자가 admin이지만 호스트 이름 검사가 필요하지 않은 경우 호스트 이름을 확인합니다. 한 줄 -'if request.user.is_superuser' -로 충분합니다. – DrTyrsa