처음엔 몰라서 각 함수마다 맨처음에 로그인 체크하고
로그인이 안되어 있으면 다른페이지로 리프레쉬되는 메타태크 문자열을 리턴했다.
로그인 되어있으면 다음코드를 진행하고…
각 함수마다 이렇게 해놓으니 지저분하고 유지보수도 짜증날 것 같아서 간단한 방법이 없을까 찾아봤다.
로그인여부가 필요한 함수에 로그인을 체크하고 처리하는 데코레이터를 붙여서 처리했다.
예,
1
2
3
4
5
|
@route ( '/rsyslog/list' ) @route ( '/rsyslog' ) @authenticated def get_list(): return "Get Some List" |
로그인 했을 때만 사용할 수 있는 페이지를 뿌려주는 함수에 authenticated 라는 데코레이터를 붙인다.
authenticated를 이렇게 만든다.
1
2
3
4
5
6
7
8
|
def authenticated(func): def wrapped( * args, * * kwargs): if check_login(): return func( * args, * * kwargs) else : redirect( 'login' ) return wrapped |
로그인이 되어 있으면 인자로 넘어온 함수를 그대로 리턴하고
그렇지 않으면 로그인페이지로 넘긴다.