2010-06-21 2 views
-1

저는 base.html 템플릿 페이지에 로그인 상자가있는 사이트를 개발하고 있습니다. 사용자가 로그인해야하는 모든 페이지에 대해 login_required 데코레이터를 사용하고 있습니다. 그러나 사용자가 원하는 경우 다른 페이지에 로그인 할 수있게하고 싶습니다.login_optional 데코레이터?

"login_required"데코레이터가하는 일은 원하는 페이지를 표시하기 전에 로그인했는지 확인하는 것 이외에 로그인의 요령과 볼트를 처리하는 것입니다.

내가 원하는 것은 이러한 선택적 페이지에 대한 "login_optional"데코레이터 (또는 login_required 내의 선택적 매개 변수)입니다. 나는 그런 것을 발견 할 수 없다. 그것이 존재하고 나는 그것을 잃어 버렸을 뿐인가, 아니면 이러한 뷰를 위해 자신의 로그인 처리 루틴을 롤백해야합니까?

감사

마이크
EDIT (샘플 코드)
템플릿

<form action="" method="post"> 
    <label for="username">Username:</label> 
    <input type="text" name="username" value="" id="username" size="10"/> 
    <label for="password">Password:</label> 
    <input type="password" name="password" value="" id="password" size="10"/> 
    <input type="submit" value="Login"/> 
    <input type="hidden" name="next" value="{{ next|escape }}"/> 
</form 

>

로그인 필요한 코드

@login_required 
def chooseDistributor(request): 
    user = request.user 
    # blah stuff deleted 
    # NOTHING TO HANDLE request.POST! 
    return render_to_response('choose_distributor.html',locals()) 

로그인 옵션 코드

def showWelcome(request): 
    user = request.user 
    return render_to_response('welcome/home.html',locals()) 

답변

2

무엇을 의미합니까? login_optional은 login_required 데코레이터가없는보기 일뿐입니다 ... : p.

login_required 데코레이터는 모든 로그인 기능을 처리하지 않고 사용자가 요청 컨텍스트의 User 객체를 제어하여 로그인했는지 여부를 확인합니다. 사용자가 로그인하지 않으면이 데코레이터는 실제 로그인 기능을 보유하고있는 페이지로 리디렉션합니다.

데코레이터는 체크 + 리디렉션이므로 페이지에 대한 로그인을 선택 사항으로 지정하면 데코레이터 만 제거됩니다.

+0

위의 EDIT를 참조하십시오. 즉, login_required 데코레이터가 로그인 폼의 POST 응답을 처리한다고 가정합니다. 물론 데코레이터가없고 다른 POST 처리 코드가없는 페이지는 로그인 작업을 처리 할 수 ​​없습니다. login_required 데코레이터에서 적절한 코드를 복사 할 수는 있지만 DRY 원칙을 위반하므로 질문을합니다. – jamida

+0

아니요, 로그인 데코레이터에는 로그인 POST 처리 코드가 포함되어 있지 않습니다. 로그인 데코레이터 만 해당 로그인 데코레이터를 처리합니다. 그러나 잘 작성된 로그인 페이지는 로그인 장식자를 사용하여 다시보기로 리디렉션합니다. 실제로, login_required 데코레이터는 어떤 로그인 핸들링 코드도 포함하지 않는다 : p. – KillianDS

+0

예, 이제 보았고 이해합니다 ... >> blush << Thanks. – jamida