티스토리 뷰

728x90

Request를 배웠으니 이제 html 에서 사용자가 입력한 데이터를 전송 해서 Flask로 받아서 처리 해야 됩니다.

GET 이냐 POST냐 구분 까지 했고 html 에서 전달된 데이터를 Flask 에서 어떻게 처리 하는지 알아 봅시다.

보통 웹에서 이런 처리를 Request get parameter 라고 부릅니다. 이전 글에서 GET 과 POST 방식에 대해 알아보고 요청까지 했습니다.

2020/05/02 - [KIT] - [웹 앱프로그래밍] 파이썬 플라스크(Python Flask) 디렉토리(폴더) 구성

 

[웹 앱프로그래밍] 파이썬 플라스크(Python Flask) 디렉토리(폴더) 구성

이 전 글에서 마지막 부분에 html 폼을 만들어 GET POST 테스트를 해봤습니다. 2020/05/01 - [KIT] - [웹 앱프로그래밍] 파이썬 플라스크(Python Flask) 기본 구조와 HTTP Request 불러오는 중입니다... 근데 그냥..

wings2pc.tistory.com

Flask 에서 처리 하기 전에 먼저 html 소스에서 <form><input> 에 보면 name 이라는 속성이 있습니다. 이 name의 속성 값이 중요 합니다. 클라이언트에서 서버로 데이터를 전송 할때 이름과 값의 쌍이 전송이 되는데 이형태는 key 와 value로 표현이 될 수 있습니다. 그래서 <input type="text" name="num"> 이 num 이라고 하는것이 key 가 되고  이 텍스트 박스에서 입력된 내용은 value가 됩니다. 이걸 꼭 알아야 아래 설명들을 이해 할 수 있습니다.

 

GET과 POST 로 받는 방식은 조금 다릅니다. GET 은 URL에 쿼리스트링(query string)으로 데이터가 넘어 오고 POST는HTTP 요청 메시지에서 body에 데이터를 담아 보낸다고 했습니다.

 

먼저 GET으로 데이터를 받아 오는 방법에 대해 알아 봅니다.

GET 에서 쿼리스트링으로 URL의 끝에 ?와 함께 key와 value로 쌍을 이루는 요청 파라미터 (파라미터가 여러 개이면 &로 연결) 들어 오기 때문에 Arguments (차이는 있습니다만 이렇게 일단 이렇게 이해 하죠(인수 = 매개 변수 = 파라미터) 로 받아서 처리 합니다. 보통 다른언어에서도 많이 쓰이는 Arguments 표현은 args로 되고 배열에 값이 담기게 됩니다.

 

HTML form 으로 넘어 오는 args 는 key 와 value 쌍을 이루기 때문에 이것은 파이썬에서 딕셔너리로 형태로 데이터를 받을 수 있습니다.

args_dict = request.args.to_dict()

이렇게 받게 되면 args_dict에는 딕셔너리 형태로 {key: value} 로 나오게 됩니다. 딕셔너리 사용 방법은 이미 파이썬을 다룰줄 안다면 args_dict[key] 이렇게 하면 값을 받아올 수 있게 되겠죠.

위에서 num 이라는 키값으로 텍스트 박스에 123 이라는 데이터를 넣어 전달 하거나 URL 뒤에 ?num=123 (GET은 가능) 입력하고 요청을 하면 args_dict 에 값은 {'num':'123'} 이렇게 나오게 되겠죠. args_dict['num']의 값은 123는 결과가 나오게 될겁니다.

만약 우리가 num 이라는 키값을 알고 있으면 아래와 같이 바로 받아 올 수 있습니다.

request.args["num"] 또는 request.args.get("num")

 

 

이제 POST로 데이터를 받는 방법을 알아보죠.

이전 글에서 Http Request Method 표를 보면 POST는 보통 form 통해 데이터를 전송이라고 설명이 되어 있습니다.

GET은 쿼리스트링으로 URL에 데이터를 직접 입력해서 전송이 가능 하지면 POST는 HTTP Body에 들어 가기 때문에 form에서 데이터를 전송할 수 있습니다. 그래서 Flask에서 받는 방식도 아래와 같이 form이라는 키워드를 이용 합니다.

request.form[key]

GET에서 보냈던 num이라는 데이터를 받아 보면 request.form["num"] 이렇게 쓰고 이 값은  123이라는 결과가 나올거에요.

크롬 브라우저 개발자 도구에서 아래와 같이 확인이 가능 합니다.

Flask에서 GET 과 POST로 데이터를 받는 방법을 알아 봤습니다. 

 

아래는 이전 글에서 만든 폼을 가지고 테스트한 전체 소스 입니다.

 

app.py 소스

from flask import Flask, request, render_template
app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello, World!'

@app.route('/hello')
def hellohtml():
    return render_template("hello.html")

@app.route('/method', methods=['GET', 'POST'])
def method():
    if request.method == 'GET':
        # args_dict = request.args.to_dict()
        # print(args_dict)
        num = request.args["num"]
        name = request.args.get("name")
        return "GET으로 전달된 데이터({}, {})".format(num, name)
    else:
        num = request.form["num"]
        name = request.form["name"]
        return "POST로 전달된 데이터({}, {})".format(num, name)

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

hello.html 소스

<!DOCTYPE html>
<html>
<body>

<h2>KIT 웹앱 프로그래밍</h2>

<form action="/method" method="POST">
  <label for="fname">학번:</label><br>
  <input type="text" id="fname" name="num"><br>
  <label for="lname">이름:</label><br>
  <input type="text" id="lname" name="name"><br><br>
  <input type="submit" value="확인">
</form> 

</body>
</html>

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함