2012-10-10 2 views
0

내 상황은 다음과 같습니다.다른보기에서 Django 등록 및 내용

CMS 인 django 앱이 있는데이 앱은 페이지 콘텐츠와 메뉴를 생성합니다.

모든 페이지 콘텐츠를 생성하는 '기본'보기가 있습니다. 주요 모델의 필드 중 하나가 설정에 따라 페이지의 가시성을 제한하도록 설계되었습니다

  • '내부'(우리 네트워크의 사용자에 한함) www가에 의해 볼 (
  • '전 세계') 이제는 추가 값인
  • '보안'을 추가하고 싶습니다. 이는 사이트에 로그인 한 사용자에게만 표시를 제한합니다.

전체 기능에서만 작동하므로 @login_required가 작동하지 않을 것이라고 생각합니다.

특수 기능을 코딩하는 대신 작성자 또는 편집자가이 플래그를 설정할 수있게하려고합니다. 페이지가 '내부'에서 '안전'에서 '전세계'로 마이그레이션되는 경우가 있으므로 이상적으로 URL은 동일하게 유지되어야합니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 미리 감사드립니다 ... 패트릭

답변

0

개체에 플래그를 설정하려면 뷰에 이미 들어있을 때까지 해당 플래그를 읽을 수 없다고 가정합니다 (즉, 저장하지 않을 것입니다). 요청 객체가 액세스 할 수있는 세션 (예 : 세션))에서 사용자 정의 데코레이터를 배제합니다. 당신은 이런 식으로 비트 원유하지만 가능한 이동하도록 선택할 수 있습니다 :

if (val=="internal" and inrange(request.META['REMOTE_ADDR'])) or (val=="secure" and request.user.is_authenticated()) or val=="worldwide": 
    return render_to_response .... etc. 
else: 
    return HttpResponseForbidden() 

이 모델 값을 대입하고, inrange 기능을 작성, 자연스럽게.

더 복잡한 접근 방식은 맞춤형 미들웨어를 작성하고 process_view() 함수를 사용하는 것입니다. 자세한 내용은 문서를 참조하십시오.