기본적으로 로그인 폼에서
<form method="post" action=".">
    <p><label for="id_username">사번:</label> {{ form.username }}</p>
    <p><label for="id_password">비밀번호:</label> {{ form.password }}</p>
    <input type="hidden" name="next" value="이동할경로" />
    <input type="submit" value="로그인" />
</form>
이렇게 해주면 되지만,
views.py 에서 @login_required 데코레이터를 사용하기 시작하면 이야기가 조금 달라진다.

@login_required 를 사용하면 사용자가 로그인이 되어있는지 체크한 후,
로그인이 되어 있지 않으면 원래 접근하려던 페이지의 경로를 뒤에 달아서 로그인페이지로 이동시킨다.
http://mysite/login/?next=원래가려던페이지경로
책에도 없고, 한글로 대충 검색해봐도 없어서 구글신과 django/contrib/auth/view.py 파일을 보고나서
아래와 같은 답을 얻을 수 있었다.

1. login.html 을 아래와 같이  수정.
<form method="post" action=".">
    <p><label for="id_username">사번:</label> {{ form.username }}</p>
    <p><label for="id_password">비밀번호:</label> {{ form.password }}</p>
    <input type="hidden" name="next" value="{{ next }}" />
    <input type="submit" value="로그인" />
</form>
2. settings.py 에 LOGIN_REDIRECT_URL 설정 추가
LOGIN_REDIRECT_URL = '/'

@login_required 에 의해 next 값을 물고 오는 경우에는
1번에서 지정한 next 값이 제대로 설정되어서 원하는 페이지로 이동하게 되고,

next 값이 지정되지 않은 경우에는 (바로 로그인 페이지로 접속한 경우 등)
2번에서 설정한 LOGIN_REDIRECT_URL 경로로 이동하게 된다.
(이 경로를 지정하지 않으면 django 기본 설정값인 '/accounts/profile/' 로 이동하게 된다.)

이래저래 어이없이 간단한 부분에서 고생중이다.
2009/07/28 17:17 2009/07/28 17:17
[  ,  ]
Trackback URL : http://hschoi.com/life/trackback/24
openclose