티스토리 뷰

IT/Flask

[Flask] HTTP 메소드 (HTTP Method)

Dragonz 2019. 4. 16. 11:10
반응형

 

HTTP는 URL 접근에 대해 몇 가지 다른 방식을 제공하고 있다. 기본적으로는 GET 방식을 제공하지만 route() 데코레이터에 methods 옵션을 추가함으로써 다른 방식으로 변경할 수 있다. HTTP 메소드에는 대표적으로 GET 방식과 POST 방식이 있다.

 

▶ GET : 브라우저가 어떤 페이지에 저장된 정보를 단지 얻기 위해 서버에 요청하고, 서버는 그 정보를 보낸다. 가장 일반적인 방식이다.

www.python-test.com?id=flask&passwd=1234

URL의 끝은 "?" 로 알리고 그 뒤에 Key=Value 로 형식으로 값을 전달한다. 여러개의 Key-Value 를 전달할 때는 "&" 로 구분한다. HTTP HEADER에 내용이 담겨 서버로 전달되기 때문에 BODY는 빈 상태가 된다.

 

▶ POST : 브라우저는 서버에게 새로운 정보를 전송하도록 특정 URL에 요청하고 그 정보가 오직 한 번 저장되는 것을 보장한다. 보통 HTML 폼을 통해서 서버에 데이터를 전송하는 방식이다. GET 방식과는 달리 HTTP BODY에 내용이 담겨 서버에 전달된다.

 

파일명 : 5_http_methods.py

from flask import Flask, redirect, url_for, request
app = Flask(__name__)

@app.route('/success/<name>')
def success(name):
    return 'Welcome %s' % name

# route() 데코레이터에 methods 옵션을 추가한다.
# POST방식과 GET방식 모두 처리가 가능하며
# 함수 내부에서 메소드 방식에 따라 다르게 처리가 되도록 분기처리 한다.
@app.route('/login', methods = ['POST','GET'])
def login():
    if request.method == 'POST':
        user = request.form['nm']
        return redirect(url_for('success', name = user))
    else:
        user = request.args.get('nm')
        return redirect(url_for('success', name = user))

if __name__ == '__main__':
    app.run(debug=True)

 

파일명 : 5_http_methods.html

<html>
    <body>
        <form action = "http://127.0.0.1:5000/login" method="post">
            <p>Enter name</p>
            <p><input type="text" name="nm"/></p>
            <p><input type="submit" value="submit"/></p>
        </form>
    </body>
</html>

 

두 개의 파일을 같은 경로에 저장하고 html 파일을 실행한다. Text form에 "Flask" 를 입력하고 submit 버튼을 클릭하면 POST 방식으로 "http://127.0.0.1:5000/login" URL 을 접근한다. "Flask" 라는 문자열은 login() 함수의 user 변수에 저장되고 다시 이 값은 url_for 함수에 의해 name 이라는 이름으로 success() 함수에 전달된다. success() 함수는 전달받은 name 변수의 값을 브라우저에 출력한다.

 

 

 

 

반응형

'IT > Flask' 카테고리의 다른 글

[Flask] 정적 파일 (Static file)  (0) 2019.04.18
[Flask] 템플릿 보여주기 (Template Rendering)  (0) 2019.04.16
[Flask] URL 생성 (URL Building)  (0) 2019.03.28
[Flask] 변수 규칙 (Variable Rules)  (0) 2019.03.27
[Flask] 라우팅 (Routing)  (0) 2019.03.22
댓글
공지사항