Programming/WEB
[10] Flask로 API 만들기 : 서버 만들기, mongoDB, 프론트엔드와 백엔드 연결, Get 요청, Post 요청
알 수 없는 사용자
2023. 7. 18. 06:50
0. 학습 진도 개괄
더보기

- 프론트 엔드 : HTML, CSS, JS
- 백엔드 (서버) : app.py (Flask 서버)
- 데이터베이스 : mongoDB
➡️ 우리는 하나의 컴퓨터로 클라이언트 / 서버를 둘 다 만들 것 = 로컬 개발환경

1. Flask로 서버 만들기
1) 폴더 생성, 가상환경 설치
더보기



1) 파일 > 폴더 열기
2) app.py 파일 만들기

3) 가상환경 설치
- 터미널 > 새 터미널
python -m venv venv


2) Flask 패키지 설치하기
더보기

pip install flask

3) Flask 기초 : 실행하기
더보기


1) Flask 시작코드
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return 'This is Home!'
if __name__ == '__main__':
app.run('0.0.0.0',port=5000,debug=True)
- app : app.py 랑 같은 파일명
- port= 5000
- 파이썬 파일 실행 하면 아래처럼 나온다.

2) localhost:5000 주소 입력
- 오픈된 주소가 아니라 나만 들어가서 볼 수 있는 상

4) Flask 기초 : URL 나눠보기
더보기


@app.route('/')를 수정해서 URL을 나눌 수 있다.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return 'This is Home!'
@app.route('/mypage')
def mypage():
return 'This is mypage!'
if __name__ == '__main__':
app.run('0.0.0.0',port=5000,debug=True)

from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return 'This is Home!'
@app.route('/mypage')
def mypage():
return '<button>버튼</button>'
if __name__ == '__main__':
app.run('0.0.0.0',port=5000,debug=True)

5) Flask 시작 : HTML 파일 주기
더보기


1) templates 폴더 만들기
2) templates > index.html 만들기

3) app.py와 index.html 연결

➡️ html 수정하고, py파일 저장
- html 파일은 백엔드 서버인 파이썬 파일이 가져다주는 것
- 그래서 html 수정하고 html만 저장하면 수정한 게 반영이 안됨. 꼭 python 파일 저장해야 반영됨
6) Flask : Get, Post 요청
더보기
1) GET 요청
- 통상적으로 데이터 조회(Read)할 때 사용
- URL 뒤에 물음표를 붙여 key=value로 전달
2) POST 요청
- 통상적으로 데이터 생성(Create), 변경(Update), 삭제(Delete) 요청할 때 사용
- 예) 회원가입, 회원탈퇴, 비밀번호 수정
- 바로 보이지 않는 HTML로 전달
*GET 요청 코드 확인
더보기



1) HTML에 jQuery 임포트
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
2) App.py(백엔드) : GET 요청 API 코드
@app.route('/test', methods=['GET'])
def test_get():
title_receive = request.args.get('title_give')
print(title_receive)
return jsonify({'result':'success', 'msg': '이 요청은 GET!'})
from flask import Flask, render_template, request, jsonify
app = Flask(__name__)
@app.route('/')
def home():
return render_template('index.html')
@app.route('/test', methods=['GET'])
def test_get():
title_receive = request.args.get('title_give')
print(title_receive)
return jsonify({'result':'success', 'msg': '이 요청은 GET!'})
if __name__ == '__main__':
app.run('0.0.0.0',port=5001,debug=True)
3) HTML : GET 요청 확인 Fetch 코드
fetch("/test").then(res => res.json()).then(data => {
console.log(data)
})
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<title>Document</title>
<script>
fetch("/test").then(res => res.json()).then(data => {
console.log(data)
})
</script>
</head>
<body>
<h1>제목을 입력합니다</h1>
<button>나는 버튼!</button>
</body>
</html>
4) 원리



*POST 요청 코드 확인
더보기




1) App.py(백엔드) : POST 요청 API 코드
@app.route('/test', methods=['POST'])
def test_post():
title_receive = request.form['title_give']
print(title_receive)
return jsonify({'result':'success', 'msg': '이 요청은 POST!'})
2) HTML : POST 요청 확인 Fetch 코드
let formData = new FormData();
formData.append("title_give", "블랙팬서");
fetch("/test", { method: "POST", body: formData }).then(res => res.json()).then(data => {
console.log(data)
})
3) 원리



