💡수업 목표💡
- Flask 프레임워크를 활용해서 API를 만들 수 있다.
- '화성에 땅사기' API를 만들고 클라이언트에 연결한다.
- '스파르타피디아' API를 만들고 클라이언트와 연결한다.
Flask란?
Flask는 파이썬 기반으로 작성된 마이크로 웹 프레임워크 중 하나이다.
프레임워크 Framework는 기능을 모아놓은 라이브러리 이상으로 소프트웨어를 개발하기 위해서 표준 구조를 구현하는 클래스와 인터페이스의 집합을 의미한다. 즉 설계의 기반, 뼈대라고 보면된다.
어플리케이션을 개발 시 반드시 필요한 서버 구동, 알고리즘, DB 연동같은 기능들을 위한 설계의 기반이 되는 틀(기반코드)을 제공하기 때문에 개발자는 프레임워크가 정해놓은 구조 안에서 자신이 원하는 기능들을 구현하면 된다. 단순 기능들을 뽑아쓰는 라이브러리 형식과는 약간 차이가 있다.
- Java 서버 개발에 사용되는 Spring
- Python 서버 개발에 사용되는 Django, Flask
- 안드로이드 앱 개발에 사용되는 Android
- 아이폰 앱 개발에 사용되는 Cocoa Touch
- 웹 개발에 사용되는 Angular, Vue.js 등
- 자바 기반의 JSP를 위한 프레임 워크 Struts
- 루비로 작성된 MVC패턴을 이용하는 Ruby on Rails
Flask는 Django와 함께 Python 개발에 사용되는 프레임워크이지만 웹 어플리케이션 개발에 필요한 기능을 꽉꽉 담은 Django와 다르다.
웹 어플리케이션 개발에 필요한 최소한의 가벼운 기능을만 넣은 마이크로 웹 프레임워크로 가볍게 배우고, 사용할수 있으며 구조가 최소한이기 때문에 확장성 또한 넓다게 Flask의 주요 특징이다.
Flask 시작하기
Flask를 사용할려면 우선 패키지를 설치해야한다.
Preferences > Project > Python Interpereter를 보면 해당 프로젝트에서 현재 사용중인 패키지 리스트들을 확인할수 있다.
Flask 실행하기
Flask 패키지를 설치했다면 별다른 설치 없이 간단한 소스로 로컬컴퓨터에서 웹서버를 바로 실행할 수 있다.
app.py 파일을 만들어 아래 코드를 붙여넣어 실행시켜보자!
👉 파일 이름은 아무렇게나 해도 상관없지만, 통상적으로 flask 서버를 돌리는 파일은 app.py라고 이름 짓는다...!
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) #각자의 개발환경에 따라 5000포트가 안될때도 있다. 당황하지말고 숫자를 바꿔주자.
'Run app'을 클릭해서 터미널에 Running이 뜨면 성공!
크롬에 http://localhost:5000/ 혹은 http://127.0.0.1:5500/ 으로 접속하면 로컬 웹서버로 접속이 가능하다.
Flask URL 추가하기
@app.route('/') 부분을 수정해서 URL을 나눌 수 있다.
@app.route('/') 아래 부분의 함수가 해당 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 기본 디렉토리 구조
Flask는 프레임워크이기때문에 Flask에서 정의되어 있는 디렉토리 구조를 따라야한다.
- venv : 가상환경 디렉토리.
- static : HTML 파일 안에 들어갈 리소스(CSS, JS, image 등)를 관리하는 디렉토리.
- templates : HTML 파일을 관리하는 디렉토리.
- app.py : Flask 메인 실행 파일.
Flask의 template을 활용해보기
Flask 기본 보드를 보면 @app.route('/') 아래 함수의 return 값이 해당 URL에 페이지 화면이 된다.
하지만 reuturn에 장문의 html을 작성하기에 적합하지 않으므로 별도의 html파일을 렌더링(화면에 출력되는 과정) 해준다.
from flask import Flask, render_template
app = Flask(__name__)
## URL 별로 함수명이 같거나,
## route('/') 등의 주소가 같으면 안됩니다.
@app.route('/')
def home():
## return 'This is My Page!' 여기 HTML을 모조리 쓰기엔 너무 불편하니 template으로 관리하자
return render_template('index.html')
if __name__ == '__main__':
app.run('0.0.0.0', port=5000, debug=True)
<!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>
Flask로 API 만들기
🔥리마인드🔥 HTTP request mehtod (요청메소드)
- GET
→ 통상적으로! 데이터 조회(Read)를 요청할 때 예) 영화 목록 조회
→ 데이터 전달 : URL 뒤에 물음표를 붙여 key=value로 전달
→ 예: google.com?q=북극곰 - POST
→ 통상적으로! 데이터 생성(Create), 변경(Update), 삭제(Delete) 요청 할 때 예) 회원가입, 회원탈퇴, 비밀번호 수정
→ 데이터 전달 : 바로 보이지 않는 HTML body에 key:value 형태로 전달
Flask에서 GET, POST 방식으로 통신하기
Flask에서 GET, POST방식으로 통신하기 위해서는 HTTP 통신하는 request와 데이터를 json형식으로 주고받는 jsonify를 import 해주어야한다.
GET 방식
app.py
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=5000,debug=True)
templates/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
function hey_get() {
$.ajax({
type: "GET",
url: "/test?title_give=봄날은간다",
data: {},
success: function (response) {
console.log(response)
}
})
}
</script>
</head>
<body>
<h1>나의 첫 웹페이지!</h1>
<button onclick="hey_get()">버튼을 만들자 GET</button>
</body>
</html>
POST방식
app.py
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!'})
@app.route('/test', methods=['POST'])
def test_post():
title_receive = request.form['title_give']
print(title_receive)
return jsonify({'result':'success', 'msg': '이 요청은 POST!'})
if __name__ == '__main__':
app.run('0.0.0.0',port=5000,debug=True)
templates/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
// GET 방식 호출
function hey_get() {
$.ajax({
type: "GET",
url: "/test?title_give=봄날은간다",
data: {},
success: function (response) {
console.log(response)
}
})
}
// POST 방식 호출
function hey_post() {
$.ajax({
type: "POST",
url: "/test",
data: {title_give: '봄날은간다'},
success: function (response) {
console.log(response)
}
})
}
</script>
</head>
<body>
<h1>나의 첫 웹페이지!</h1>
<button onclick="hey_get()">버튼을 만들자 GET</button>
<button onclick="hey_post()">버튼을 만들자 POST</button>
</body>
</html>
'스파르타코딩클럽 > 웹개발' 카테고리의 다른 글
웹개발종합반 개발일지 | 4주차 - 9,10,11,12,13강 (0) | 2022.08.29 |
---|---|
웹개발종합반 개발일지 | 4주차 - 5,6,7,8강 (0) | 2022.08.28 |
웹개발종합반 개발일지 | 3주차 (0) | 2022.08.28 |
웹개발종합반 개발일지 | 3주차 - 숙제 (0) | 2022.08.28 |
웹개발종합반 개발일지 | 3주차 - 12,13,14강 Python으로 mongoDB 조작하기 (0) | 2022.08.27 |