ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python web framework: Bottle] 3. Routing 2 - 리퀘스트 메소드
    Python/Bottle 2019. 9. 1. 23:18
    반응형

    [Python web framework: Bottle] 3. Routing 2 - HTTP REQUEST METHODS

    HTTP 프로토콜에는 몇 가지의 리퀘스트(요청) 메서드(방법)가 정의되어 있습니다. 자세한 것은 다음을 참고하세요. 

    https://developer.mozilla.org/ko/docs/Web/HTTP/Methods

    Bottle에서 리퀘스트 메서드는 route() 데코레이터에 키워드 인수로 지정할 수 있습니다. 

    다른 방법으로는 route() 데코레이터 대신 get(), put(), delete(), patch() 데코레이터를 사용해도 됩니다. 

    이는 각각 GET, POST, PUT, DELETE, PATCH 메서드를 의미하겠죠? 

    메서드를 지정하지 않을 경우는 기본값인 GET으로 간주됩니다. ~!!

    from bottle import run, get, post, request  # or route
    
    
    def check_login(username, password):
        return username == "username" and password == "password"
    # 실제 프로젝트에서 암호와 패스워드를 이렇게 노출하면 절대 안됩니다.  
    
    
    @get('/login')  # or @route('/login')
    def login():
        return '''
            <form action="/login" method="post">
                Username: <input name="username" type="text" />
                Password: <input name="password" type="password" />
                <input value="Login" type="submit" />
            </form>
        '''
    
    
    @post('/login')  # or @route('/login', method='POST')
    def do_login():
        username = request.forms.get('username')
        password = request.forms.get('password')
        if check_login(username, password):
            return "<p>Your login information was correct.</p>"
        else:
            return "<p>Login failed.</p>"
    
    
    run(host='localhost', port=8080, debug=True)
    

    이 예제를 보면 /login 이 두 번 사용되었는데요. 첫 번째는 GET 리퀘스트, 두 번째는 POST 리퀘스트입니다. 

    1. 브라우저는 서버에게 /login이라는 주소를 요청합니다.

    이 요청은 GET이기 때문에 GET에 해당되는 첫 번째 함수가 실행됩니다.

    따라서 첫 번째 HTML 폼이 브라우저에게 전달됩니다.

     

    2. 첫 번째 폼을 보시면 method="post" 라고 지정되어 있습니다. 

    이 폼으로 사용자는 아이디와 패스워드를 입력한 뒤 submit을 하겠죠?

    이때 POST 방식으로 submit 하기 때문에 submit 한 데이터는 두 번째 POST 데코레이터에서 처리됩니다. 

     

    Bottle의 특별한 메서드로 HEAD와 ANY가 있습니다. 

    이 부분은 제가 사용한 적이 없어서 잘 모르겠네요. 

    사용하게 되면 좀 더 사세히 수정하도록 하겠습니다. --;

     

    HEAD 리퀘스트는 GET 라우트로 폴백(fall back)됩니다. 

    일치하는 라우트가 없는 경우에는 ANY 라우트로 폴백 됩니다.

    반응형
Designed by Tistory.