-
[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 라우트로 폴백 됩니다.
반응형