2011-03-30 11 views
13

제 질문은 일반적인 질문이지만, 제 어플리케이션은 장고에 대한 login_required 데코레이터입니다. 뷰/함수가 (이 경우 login_required 장식)를 특정 장식이있는 경우 I이 (가) 사용자가 로그인 한 후 리디렉션하고함수에 데코레이터가 있는지 확인하십시오.

를 확인하는 방법이 있는지

이 궁금 해요, 난 리디렉션 할 현재 페이지에 login_required 데코레이터가있는 경우 기본 페이지로 이동합니다. 지금까지 검색 한 결과가 없습니다.

답변

15

자신 만의 login_required 데코레이터를 만들고 장식 된 것으로 표시해야합니다. 아마도 가장 좋은 장소는 func_dict입니다.

이제
from django.contrib.auth.decorators import login_required as django_l_r 

# Here you're defining your own decorator called `login_required` 
# it uses Django's built in `login_required` decorator 
def login_required(func): 
    decorated_func = django_l_r(func) 
    decorated_func.func_dict['login_is_required'] = True 
    return decorated_func 

@login_required # Your decorator 
def authenticatedd_view(request): 
    pass 

def unauthenticated_view(request): 
    pass 

당신이보기를 다음과 같이 꾸며졌다 있는지 확인할 수 있습니다 ...

# Assume `a_view` is view function 
>>> a_view.func_dict.get('login_is_required',False) 
파이썬 데코레이터에 대해 혼란스러워하는 경우

이 SO 질문/대답을 참조하십시오 How to make a chain of function decorators?

+0

"장식 된 것으로 기능을 표시 하시겠습니까?" 로그 아웃시 리디렉션 할 적절한 URL 이름을 각 기능에 표시하지 않는 이유는 무엇입니까? 그것은보다 직접적으로 유용 할 것입니다. –

+0

@ S.Lott보기 기능에 URL 또는 URL 이름을 첨부한다는 의미 인 것처럼 들리지만, 장고에서 명시 적으로 분리 된 URL과보기가 섞여서 좋지 않을 것으로 생각됩니다. –

+0

@Chris W .: URL 이름은 'reverse()'가 작동하도록보기에서 참조됩니다. 마찬가지로 URL 이름은 템플릿에서 참조되므로 {{% url %}}이 (가) 작동합니다. 나는 당신이 "믹싱 (mixing)"을 의미하는지 모르겠습니다. 더 설명해 주시겠습니까? –

2

귀하의 상황은 다음과 같습니다 : 1. 로그인 필수 데코레이터 뒤에 보안 된 페이지가 있습니다 2. 귀하 비보안이며 로그인 상태와 익명 상태 모두에서 방문 할 수있는 페이지가 있습니다.

사용자의 요구 사항을 이해하면 사용자가 로그 아웃 할 때 사용자를 메인 페이지로 리디렉션해야합니다 (로그인 페이지와 익명 사용자 모두에서 방문 할 수있는 시작 페이지라고 가정 함).

보안 페이지에서만 사용자가 로그 아웃 할 수있는 기능을 제한 한 다음 로그 아웃 할 때 redirect_url을 시작 화면으로 설정하는 이유는 무엇입니까?

+0

+1 :보기 기능이 그 때문입니다. 로그 아웃 뷰 기능은'if request.user.is_anonymous()'를 사용하여 누군가 로그 아웃할지 여부와 표시 할 페이지를 결정할 수 있습니다. –

+0

예. 로그 아웃하려는 사용자가 로그 아웃 한 페이지로 다시 리디렉션하려는 경우 해당 페이지 /보기가 인증으로 보호되는지 여부를 알 수 없으면 작동하지 않습니다. –

관련 문제