플라스크에서 사용자의 입력을 받는 2가지 방법 -GET과 POST 알아보기!

2019. 11. 5. 07:01

웹페이지를 만들다보면 사용자의 입력을 받아야 하는 경우가 생긴다. 사용할 때는 몰랐지만 직접 내가 입력을 받아야 한다고 생각하니, 약간은 막막하고 어려운 느낌이 든다. 무턱대고 하는 것보다는 어느 정도 알고 하는 것이 웹페이지를 구상하는데 많은 도움이 된다.

오늘은 플라스크에서 사용자의 입력을 받고 처리하는 2가지 방법에 대해서 알아보도록 하겠다.


웹페이지_입력


우선 웹페이지에서 사용자의 입력을 받는 방법에 대해서 생각해보자. 우리는 보통 브라우저에 떠 있는 웹페이지를 보고 있다. 이를 프론트엔드(Front-End)라고 하고, 뒤에서 웹페이지를 만들어 쏴주는 역할을 하는 웹서버 쪽을 백엔드(Back-End)라고 한다. 그러면 사용자의 입력을 처리하는 방법은 2가지가 있다. Front-End에서 처리하는 방법Front-End에서 Back-End로 보내서 처리하는 방법이다.


1. Front-End에서 처리하는 방법

프론트엔드에서 사용자의 입력을 처리하기 위해서는 보통 자바 스크립트(Java-Script)라는 언어를 사용한다. 사용자의 입력을 웹서버까지는 보내지 않고, 앞 단에서 처리하고 결과를 보여준다. 당연히 속도도 빠르고 간편한다. 간단한 연산이나 동작들은 이렇게 처리할 수 있지만 웹서버의 데이터가 필요하거나 무거운 연산의 경우 Back-End로 보내서 처리하게 된다.


웹서버


2. Back-End로 보내는 방법

필자가 플라스크에서 처리한다고 애기하는 것은 바로 이 Back-End에서 처리하는 것을 말한다. 여기에는 GET과 POST의 2가지 방식이 존재한다. GET은 URL에 입력 파라미터로 전송하는 것이고, POST는 URL에 포함되었던 파라미터를 메시지 안에 넣는다. GET은 URL을 통해 특정 동작이 완료된 시점으로 바로 보낼 수 있기 때문에 유용하다. 하지만 너무 긴 텍스트는 보내기 어렵고, 전송 데이터가 URL에 노출된다는 단점이 있다. GET과 POST의 성능상의 차이점은 없는 듯 하다.


그러면, 플라스크 Backend에서 사용자의 입력을 처리하는 2가지 방법에 대해서 코드와 함께 알아보자. 사용자의 입력을 서버로 보내기 위해서는 HTML에서 입력태그에 type="submit"으로 method는 GET이나 POST로 입력하면 된다. 


1) GET으로 보내기

우선 아래와 같이 단순한 HTML템플릿을 만들어보았다. 버튼을 클릭하면 GET 방식으로 웹서버에 값이 전달된다.

<!doctype html>

<html>

  <head>

  </head>

  <body>

    <h2>클릭한 이름은 {{ name }}입니다.</h2>

    <form method="get" >

    <input name="name" type="submit" value="춘향이">

    </form>

  </body>

</html>


전달된 값은 아래와 같이 request모듈을 이용해서 구분하고 처리할 수 있다. 처리된 값은 rendertemplates를 통해서 사용자에게 전달된다. 처음에는 이 부분을 따로 설정해줘야 한다고 생각했는데 그렇지 않다. 파이썬 코드는 아래와 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
from flask import Flask, render_template, request
 
 
app = Flask(__name__)
 
@app.route("/",  methods=['GET''POST'])
 
def index():
 
    if request.method == 'GET':
        name = request.args.get("name""홍길동")
        print(request.form)
 
    return render_template('6_post_get.html', name = name)
 
if __name__ == "__main__":
    app.run()
 
 
cs


GET방식이라 url에 파리미터가 표시되어 있는 것을 확인할 수 있다. 이 url을 직접 입력해도 동일하게 처리가 된다.


GET방식



2) POST로 보내기

위의 예시에서 method를 post로 변경하면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
 
<!doctype html>
<html>
  <head>
  </head>
  <body>
    <h2>클릭한 이름은 {{ name }}입니다.</h2>
    <form method="post" >
    <input name="name" type="submit" value="춘향이">
    </form>
  </body>
</html>
 
cs


코드에서도 동일하게 method가 post일 때 동작하도록 한다. GET방식은 URL에 인입할 때 실행이 되지만, 이제 POST방식은 버튼이 누를 때만 실행이 된다. 그래서 POST의 경우 if문 밖에서 name이라는 변수를 선언해 주어야 한다. 그리고 POST 방식으로 바꾸면 request에 form에서 입력한 값을 가져와야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
from flask import Flask, render_template, request
 
app = Flask(__name__)
 
@app.route("/",  methods=['GET''POST'])
 
def index():
 
    name=""
 
    if request.method == 'POST':
        name = request.form.get("name""홍길동")
 
    return render_template('6_post_get.html', name = name)
 
if __name__ == "__main__":
    app.run()
 
cs


아래와 같이 url에 입력 파라미터가 없는 것을 알 수 있다.

POST방식



오늘은 이렇게 플라스크에서 사용자의 입력을 처리하는 2가지 방법에 대해서 알아보았다. GET과 POST의 2가지 방식이 있었다. 활용목적에 따라 어떤 방식으로 처리할지를 정하면 될 듯 하다.


댓글()