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 페이지로 넘겨 주는 기능을 한다.
'Flask' 카테고리의 다른 글
Flask - jinja2 template (1) | 2021.11.25 |
---|---|
Flask - flask로 정적 웹 페이지 지원 (0) | 2021.11.25 |
Flask - flask로 REST API 구현 및 테스트 (0) | 2021.11.24 |
Flask - 다양한 routing 기법 (0) | 2021.11.24 |
Flask - flask의 시작과 웹서버 실행 (0) | 2021.11.21 |
댓글