• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

render_template과 redirect

20.06.18 15:16 작성 조회수 136

1

안녕하세요. 로그인과정에서 오류발생시 redirect(url_for("members_login"))

이렇게 처리되는데요.

render_template("login.html") 과의

차이는 무엇일까요?? 표면상으로는 동일해보여서요.

더불어서 로그인 성공시 

return redirect(url_for("lists")) 를 통해 list로

이동하게 되면 session["email"], session["name"] 등의 정보가 자동으로 넘어가서 리스트에서 출력되는 것 같은데 어떻게 가능한가요??

답변 1

답변을 작성해보세요.

1

동일한 질문이 있어 기존의 답변으로 대체 하겠습니다. ^^

엄밀히 따지면 redirect 는 주소만 연결시켜주는 기능이고 render_template는 템플릿을 렌더링 하는 목적이라 서로 다른 기능이지만 너무 복잡하게 생각할 필요는 없을것 같습니다. 그래도 좀더 부연설명을 드리자면 redirect는 현재 세션 흐름의 결정을 direct한 주소에서 결정을 하게 되는 상황이고(현재 주소에서는 아무것도 안한게 됨) render_template는 현재 페이지에서 결정인 되는 상황입니다. 현재 강좌에서는 단순한 예시라 고민할 필요가 없는 부분이지만 만약 규모가 크고 구조가 복잡한 사이트를 제작할때는 이런 부분도 생각해볼 부분들이 많이 있으니 이정도만 참고하시면 될듯 합니다.

어쨌든 위에서의 목적은 사용자가 로그인되지 않았으니 다시 로그인을 하게끔 편의성을 제공하여 로그인페이지로 이동시켜주는게 주 목적인지라 redirect로 이동하던 render_template로 login.html 을 렌더링 하던 그 부분은 상관없으리라 생각됩니다.

관리적인 측면에선 redirect 가 좀 더 편하긴 합니다. (예: login.html 파일명을 login_new.html 로 변경하였을때... )

또한 session["email].. 과 같은 변수를 보통 세션변수라고 부릅니다. 보통 브라우저로 사이트에 최초 접속했을때부터 서버는 해당 브라우저를 한개의 세션아이디로 관리하게 됩니다. 물론 개발자가 추가적으로 변수를 할당해서 사용할 수 있고 사이트 전역적으로 필요로 하는 변수에 (예를 들어 로그인정보 같은..) 사용하기도 합니다.

세션변수는 클라이언트가 아닌 서버에서 관리되는 변수이고 대략적으로 라이프사이클이(유지시간) 디폴트로 30분정도로 설정되어있습니다. 물론 서버 설정을 통해 시간을 변경할 수 있습니다. 이 라이프사이클은 사용자에게 어떠한 요청(Request)이 30분동안 없으면 해당 세션을 서버가 자동 삭제를 하게 되고 그렇지 않는 경우 계속 자동으로 갱신됩니다. 여기서 말하는 사용자는 브라우저 객체 1개를 말하며 로그인과는 별개의 문제입니다.

세션변수는 개발입장에선 유용하고 편리한 기능이지만 서버의 자원을 사용하는 변수이니 적절히 사용하는게 좋습니다.