본문 바로가기
Flask

Flask - REST API의 이해를 위한 웹 기술

by DGK 2021. 11. 24.

 

Flask 입문 수업을 듣고 중요한 내용을 정리했습니다.
개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다.

 

REST API의 이해를 위한 웹 기술(Python)

flask로 프론트엔드와 백엔드를 한 번에 구현하는 연습을 하고자 한다.

 

GET 방식과 URL

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

@app.route('/login')
def login():
    username = request.args.get('user_name')
    if username == 'kim':
        return_data = {'auth': 'success'}
    else:
        return_data = {'auth': 'failed'}
    return jsonify(return_data)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port='8080')

 

```

결과 :

(HTTP 요청)

http GET http://localhost:8080/login

 

(HTTP 응답)

터미널창에서 GET 함수를 사용하여, 웹 주소에 요청한 응답 결과이다. (JSON 형식)

단, auth : 'failed'의 응답 결과가 나타난 이유는 GET 함수를 사용하여 웹 주소에 요청 할 때 어떠한 파라미터 값도 넣지 않았기 때문이다.

 

 

(HTTP 요청)

http GET http://localhost:8080/login?user_name=kim

 

(HTTP 응답)

이처럼, GET 함수로 웹 주소에 요청할 때 파라미터를 함께 넣어 줄 수 있다.

단, URL 이후 첫 파라미터 이름 전에 ?를 표시하고, 추가 파라미터는 &로 연결하여 표시해준다.

auth : 'success'의 응답 결과가 나타난 이유는 user_name = kim으로 파라미터 값을 넣어주었기 때문이다.

 

```

 

 

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


@app.route('/login')
def login():
    username = request.args.get('user_name')
    passwd = request.args.get('pw')
    email = request.args.get('email_address')
    print(username, passwd, email)
    
    if username == 'kim':
        return_data = {'auth': 'success'}
    else:
        return_data = {'auth': 'failed'}
    return jsonify(return_data)


if __name__ == '__main__':
    app.run(host="0.0.0.0", port="8080")

 

```

결과 :

(HTTP 요청)

http GET http://localhost:8080/login?user_name=kim&pw=111&email_address=DGK@gmail.com

 

(HTTP 응답)

위의 응답 결과는 GET 함수를 사용하여, 3개의 파라미터를 넣어준 결과이다. (user_name, pw, email_address) 

이처럼 파라미터의 이름만 알고 있으면, 원하는 만큼의 파라미터를 주고(요청) 받을 수 있다.

 

```

 

*참고

REST API 요청 시, url 뒤에 붙는 파라미터 값들을 flask 코드안에서 사용하려면 request() 함수가 필요하다.

이 경우에, parameter 값은 request.args.get() 함수의 인자로 들어가서 파이썬 코드의 변수로 할당된다.

(ex. username, passwd, email)

 

 

GET 방식과 HTML

*HTML 파일

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <form method="get" action="http://localhost:8080/login">
      <center>
        <h1>로그인</h1>
        ID: <input type="text" name="user_name" /><br/>
        PW: <input type="text" name="pw" /><br/><br/>
        <input type="submit" />
      </center>
    </form>
  </body>
</html>

 

*파이썬 파일

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


@app.route('/login')
def login():
    username = request.args.get('user_name')
    passwd = request.args.get('pw')
    email = request.args.get('email_address')
    print(username, passwd, email)
    
    if username == 'kim':
        return_data = {'auth': 'success'}
    else:
        return_data = {'auth': 'failed'}
    return jsonify(return_data)


if __name__ == '__main__':
    app.run(host="0.0.0.0", port="8080")

 

```

결과 :

(Response)

127.0.0.1 - - [25/Nov/2021 10:44:23] "GET /login?user_name=park&pw=111 HTTP/1.1" 200 -
park 111 None

 

 

(Response)

127.0.0.1 - - [25/Nov/2021 10:44:56] "GET /login?user_name=park&pw=111 HTTP/1.1" 200 -
kim 111 None

 

```

 

http://127.0.0.1:5500/ 서버에 HTML 파일을 띄우고, http://localhost:8080/login 서버에 파이썬 파일을 띄워서 GET 함수를 통해  HTTP 요청과 응답을 받은 결과이다.

 

참고로, HTML 파일의 form 태그에서 action 속성은 submit 버튼을 눌렀을 때 action의 속성 값(특정 페이지)으로 넘겨주는 역할을 한다. 즉, 위의 예시 코드에서는 submit 버튼을 누르면 HTML 파일을 띄운 페이지에서 http://localhost:8080/login 페이지로 넘겨 주는 기능을 한다.

 

 

댓글