2011-04-24 3 views
0

나는 앱의 중심이기 때문에 많은 메소드가있는 장고 모델을 보유하고 있으며 앞으로도 더 많은 기능을 제공 할 것입니다. 레거시 데이터베이스와 인터페이스하는 사용자 정의 사용자 모델입니다. 다른 영역, 다른 종류의 비용 등에 대한 사용자의 액세스 권한을 확인하는 방법이 있습니다.광범위한 개체 구성

서로 관련이있는 방법 그룹이 있으므로 개별 클래스로 구분하고 개체 구성을 사용하는 것이 좋습니다 . 내 질문은 최종 개발자에게 어떻게 보이게 할 것인가이다. 그들은 user.access.has_normal_access()과 같은 객체 체인을 사용해야합니까, 아니면 단순히 기본 객체로 통과하는 메소드가 사용자 객체에 있어야합니까?

개체 체인은 파이썬에서 권장하지 않지만 패스 스루 메서드를 만드는 대안은 기본 클래스의 메서드 수를 줄이는 목적과는 다른 것 같습니다.

생각하십니까?

답변

0

동일한 기본 db 모델의 메소드를 다른 관련 메소드 세트로 분할하려면 proxy models을 사용해야합니다.

동일한 기본 db가 사용되지만 서로 다른 별개의 클래스가됩니다.

비록 이것이 User 클래스에 대해 이야기 할 때 이것이 최선의 해결책이라고 확신하지 않습니다. 확실하게 말할 수있는 충분한 세부 사항을 제공하지는 못했지만 확실하게 당신이 의도 한대로 달성하기 위해 builtin permissions을 사용할 수 있습니까?

+0

프록시 모델은 가치가있을 것이다, 그러나 같은 특정 탐색 요소가 페이지에 표시할지 여부를 알 수있는 권한을 확인하는 등의 모든 사용자가 필요 방법이 많이있다 . 또한 Django'User' 모델을 사용하지 않고 기존 데이터베이스 테이블과 인터페이스하기 위해 작성했습니다. – exupero

0

나는 비 django, 데코레이터를 사용하여 순수 파이썬 솔루션을 가정합니다 괜찮아요.

  • 비즈니스는 비즈니스 로직 기능,
  • dev_api이 기능을 그룹화 "확인"기능 등등 당신의 persmission, 다른 비용 함수를 CHECK2, 코드

    def check1(): print "check1" 
    def check2(): print "check2" 
    
    def dev_api(f): 
        def fd(*args, **kw): 
         check1() 
         check2() 
         f(*args, **kw) 
         # optionally, perform some post check 
         print "post check" 
        return fd 
    
    @dev_api 
    def business(a, b, *args, **kw): 
        print 'business', a, b, args, kw 
    
    business(1, 2, 'a', 'b', 'c', x='x', y='y') 
    
    • CHECK1 다음 사항을 고려하십시오이다 실행을 "확인"기능으로 제한해야합니다.

    지금 위와 같이 장식 된 비즈니스 논리 함수를 노출하거나 최종 개발자 소비를 위해 데코레이터를 노출 할 수 있습니다.

    데코레이터 (매개 변수가있는 데코레이터)에 대해 배울 점이 더 있습니다. 필요한 경우 더 많은 예제를 요청하십시오.

    위의 코드의 출력

     
    check1 
    check2 
    business 1 2 ('a', 'b', 'c') {'y': 'y', 'x': 'x'} 
    post check 
    
  • +0

    장식자는보기 기능을 위해 작동하지만 템플리트와 다른 영역에서도 동일한 검사가 필요합니다. 당신은 데코레이터로 뭔가있을 수 있습니다 : 탐험 할 클래스 장식 자 솔루션이 있습니까? – exupero

    +0

    불행히도, 장고에 익숙하지 않아서 데코레이터가 장고를 사용하는 모든면의 해결책인지는 모르겠지만, imho 함수/메소드와 클래스 데코레이터는 가치가있을 것입니다. – wrobell

    관련 문제