ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 플라스크(Flask) ; 동적인 URI
    개발/python 2016. 8. 24. 01:56

     지난 번 포스팅 때 플라스크를 이용해 간단하게 웹서버를 띄워보았습니다.

     이번에는 URI를 동적으로 사용하는 방법에 대해 예시를 들어 간단하게 보도록 하겠습니다.


     저희가 이전에 사용했던 코드는 아래와 같습니다.


    from flask import Flask
    app = Flask(__name__)
    
    @app.route('/')
    def hello_flask():
    return 'Hello Flask!'
    
    if __name__ == '__main__':
    app.run()
    


     여기서 눈치빠른 분들은 알아차리셨겠지만, @app.route라는 부분 뒤에 '/'라고 URI와도 같은 것을 셋팅해주는 것을 알 수 있습니다. 플라스크는 기존에 복잡하게 연결해야했던 URI를 위처럼 @app.route라는 한 줄로 해결해 줍니다. 위의 경우에는 애플리케이션의 루트로 접근했을 경우를 설정해 준 것입니다. 다른 경로를 셋팅해 주어보고 실행해 보겠습니다.


    위의 @app.route('/')를 @app.route('/hello/')로 변경해줍니다. '/'는 빠지고 안 빠지고에 차이가 있으므로 정확히 입력해줍니다. 작성하고 확인해 보시면, 이전과는 달리 "http://127.0.0.1:5000" 으로 접속했을 때가 아닌, "http://127.0.0.1:5000/hello"를 입력했을 때 정상적으로 출력됨을 확인하실 수 있을 것입니다.


     여기서 의문을 가지실 테지만 '/'를 입력하고 안 하고의 차이가 없어보인다는 부분은, 실제로 라우팅하는 경로를 "/hello/"가 아닌 "/hello"로 설정했을 경우 아실 수 있습니다. 만약 뒤쪽의 '/'를 빼고 입력할 경우, 웹 브라우저에서는 "http://127.0.0.1:5000/hello/" 라는 경로를 입력할 경우 위치를 찾지 못함을 알 수 있습니다. @app.route('/hello/')에서 "http://127.0.0.1:5000/hello"를 입력하면 뒤에 '/'를 붙여서 리다이렉트해주는 것과는 다르다는 부분을 유념하시면 좋을 것 같습니다.



     이제 기본적인 라우팅에 대한 설명을 마쳤으니, 동적인 URI를 사용하는 방법에 대해서 설명해보겠습니다. 사실 설명을 우선 하는 것보다 예시 코드를 작성해보도록 하겠습니다. 위의 코드에 또다를 URI 를 추가하여 라우팅 해보겠습니다.



    @app.route('/profile/')
    def get_profile(username)
    return 'profile : ' + username
    


     일단 작성한 코드를 보시면 대괄호로 감싸진 부분이 route 부분에 추가되어있음을 확인할 수 있습니다. <username>이라고 작성한 경우, <변수>를 아래쪽의 함수에서 인자로 받아들일 수 있습니다. 실제로 해당 코드를 추가하여 해당 주소로 접근해보면, <username>에 들어가는 값에 따라 화면에 보이는 내용이 바뀌는 것을 확인할 수 있습니다.


    ( localhost라고 작성되어있는 것은 앞에서 계속 썼던 127.0.0.1과 같은 값이라고 생각하시면 됩니다. )


     이제 우리는 플라스크의 강력한 라우팅 기능을 통해, 동적 URI를 사용할 수 있게되었습니다. 만약 여기서 들어오는 값을 문자열이 아닌 다른 인자로 받고 싶으신 경우는 <변환타입:변수> 와 같이 사용하시면 됩니다. 예를 들면, <int:number>과 같은 식으로 작성할 수 있습니다. 이렇게 앞에 붙는 변환타입을 "변환기"라고 부르는데, 변환기는 아래와 같은 것이 있습니다.


     1. <int:변수> - 정수형

     2. <float:변수> - 실수형

     3. <path:변수> - 문자열 + "/"


     이러한 동적 URI의 장점에 대해서는 여러가지가 있겠지만, 개인적으로는 코드의 중복을 없애서 유지보수를 쉽게 하는 부분이 가장 크다고 생각합니다.

    댓글

Designed by Tistory.