▶현재 시간 : 2022년 10월 18일 19:08 P.M.
flask 개념정리 안된 상태에서 강의를 들었더니 이해도가 낮아져서 개념정리하고 다시 하려고 한다.
▶[수업 목표]
- Flask 프레임워크를 활용해서 API를 만들 수 있다.
- '화성에 땅사기' API를 만들고 클라이언트에 연결한다.
- '스파르타피디아' API를 만들고 클라이언트와 연결한다.
▶오늘 배울 것 이야기- Flask
- 오늘은 HTML과 mongoDB까지 연동해서 서버를 만들어봅니다!
- 나중에 또 이야기하겠지만 헷갈리면 안되는 것! 우리는 컴퓨터가 한 대 잖아요... 그래서 같은 컴퓨터에다 서버도 만들고, 요청도 할 거예요. 즉, 클라이언트 = 서버가 되는 것이죠. 이것을 바로 "로컬 개발환경"이라고 한답니다! 그림으로 보면, 대략 이렇습니다.
- 그치만 우리는 mongoDB Atlas라는 클라우드 서비스를 이용하니, 아래와 같겠죠!
▶Flask 시작하기 - 서버만들기
1) Flask 기초: 기본 실행
- Flask 프레임워크: 서버를 구동시켜주는 편한 코드 모음. 서버를 구동하려면 필요한 복잡한 일들을 쉽게 가져다 쓸 수 있습니다. 프레임워크를 쓰지 않으면 태양초를 빻아서 고추장을 만드는 격! 프레임워크는 3분 요리/소스 세트라고 생각하면 되겠습니다.
- app.py 파일을 만들어 아래 코드를 붙여넣어봅니다. 파일 이름은 아무렇게나 해도 상관없지만, 통상적으로 flask 서버를 돌리는 파일은 app.py라고 이름 짓습니다!
- 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)
- 오른쪽 클릭 → 'Run app'(실행)을 클릭하고, 터미널에 아래와 같은 메시지가 뜨면 실행 성공!
- 이제 크롬에서 http://localhost:5000/ 으로 접속해보세요.
- 종료하는 방법
👉 터미널 창을 클릭하시고, ctrl + c 을 누르시면 서버를 종료할 수 있습니다.
- Flask 기초: URL 나눠보기
url 별로 함수명이 같거나, route('/')내의 주소가 같으면 안됩니다.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return 'This is Home!'
@app.route('/mypage')
def mypage():
return 'This is My Page!'
if __name__ == '__main__':
app.run('0.0.0.0',port=5000,debug=True)
▶Flask 시작하기 - HTML파일 주기
- Flask 기초: 기본 폴더구조 - 항상 이렇게 세팅하고 시작!
Flask 서버를 만들 때, 항상, 프로젝트 폴더 안에,
ㄴstatic 폴더 (이미지, css파일을 넣어둡니다)
ㄴtemplates 폴더 (html파일을 넣어둡니다)
ㄴapp.py 파일 이렇게 세 개를 만들어두고 시작하세요. 이제 각 폴더의 역할을 알아봅시다! (꼭 참고!! venv는 실제로는 보이지만, 안보인다~라고 생각하세요! 기억하시죠?)
- Flask 기초: HTML 파일 불러오기
templates 폴더의 역할을 알아보겠습니다.
HTML 파일을 담아두고, 불러오는 역할을 하죠!
1) 간단한 index.html 파일을 templates 안에 만들기
<!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>
function hey(){
alert('안녕!')
}
</script>
</head>
<body>
<button onclick="hey()">나는 버튼!</button>
</body>
</html>
2) html 파일을 파이썬에서 불러오기
flask 내장함수 render_template를 이용합니다. 바로 이게 프레임워크의 위력!
▶Flask시작하기 - 본격 API 만들기
1) 들어가기 전에: GET, POST 요청타입 - 리마인드
리마인드! 은행의 창구가 API와 같다는 것을 기억하시나요?
같은 예금 창구에서도 개인 고객이냐 기업 고객이냐에 따라 처리하는 것이 다른 것처럼,
클라이언트가 요청 할 때에도, "방식"이 존재합니다.
HTTP 라는 통신 규약을 따른다는 거 잊지 않으셨죠? 클라이언트는 요청할 때 HTTP request method(요청 메소드)를 통해, 어떤 요청 종류인지 응답하는 서버 쪽에 정보를 알려주는 거에요.
GET, POST 방식
여러 방식(링크)이 존재하지만 우리는 가장 많이 쓰이는 GET, POST 방식에 대해 다루겠습니다.
* GET → 통상적으로! 데이터 조회(Read)를 요청할 때 예) 영화 목록 조회
→ 데이터 전달 : URL 뒤에 물음표를 붙여 key=value로 전달
→ 예: google.com?q=북극곰
* POST → 통상적으로! 데이터 생성(Create), 변경(Update), 삭제(Delete) 요청 할 때
예) 회원가입, 회원탈퇴, 비밀번호 수정
→ 데이터 전달 : 바로 보이지 않는 HTML body에 key:value 형태로 전달
2) GET, POST 요청에서 클라이언트의 데이터를 받는 방법
예를 들어, 클라이언트에서 서버에 title_give란 키 값으로 데이터를 들고왔다고 생각합시다. (주민등록번호 라는 키 값으로 900120- .. 을 가져온 것과 같은 의미)
받은 값을 개발자가 볼 수 있게 print 로 찍어볼 수 있게 했습니다. 실전에선 print로 찍어주는 것 외에, 여러가지 작업을 할 수 있겠죠?
- Jquery 임포트
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
- 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!'})
- GET 요청 확인 Ajax코드
$.ajax({
type: "GET",
url: "/test?title_give=봄날은간다",
data: {},
success: function(response){
console.log(response)
}
})
- 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!'})
- POST 요청 확인 Ajax코드
$.ajax({
type: "POST",
url: "/test",
data: { title_give:'봄날은간다' },
success: function(response){
console.log(response)
}
})
'Web development (4)' 카테고리의 다른 글
웹개발 4주차 (5) - Flask 연습 (팬명록 프로젝트) (0) | 2022.10.20 |
---|---|
웹개발 4주차 (4) - Flask 연습 (스파르타피디아 프로젝트) (0) | 2022.10.20 |
웹개발 4주차 (3) - Flask 연습 (meta 태그, 스파르타피디아 프로젝트) (0) | 2022.10.20 |
웹개발 4주차 (2) - Flask 연습 (화성땅 공동구매 프로젝트) (0) | 2022.10.20 |