[Flask] 가장 빠른 풀스택 / 섹션 4. 파이썬 flask 기본과 웹기술
섹션 4. 파이썬 flask 기본과 웹기술
- flask 다양한 routing 기법
- Rest API 이해를 위한 웹 기술 이해 : HTTP 프로토콜
- flask로 Rest API 구현과 테스트
flask 다양한 routing 기법
기본 라우팅
from flask import Flask
app = Flask(__name__)
@app.route("/") # / 라는 요청이 들어오면, 아래 hello라는 함수를 실행한다
def hello():
return "<h1>Hello World!</h1>"
@app.route("/hello") # /hello 라는 요청이 들어오면, 아래 hello_flask라는 함수를 실행한다
def hello_flask():
return "<h1>Hello Flash!</h1>"
if __name__ == "__main__":
app.run(host="0.0.0.0", port="8080") # 이미 사용되는 포트번호일 경우, error
위 코드를 실행할 경우, http:// 0.0.0.0:8080/ 의 주소로 웹이 열린다
기존 웹 페이지에서는 포트 번호가 안 보이는 경우가 많음. 왜 ?
http, https는 각각 80, 443 포트를 기본 포트로 지닌다. 그러나, 기본 포트 번호가 아닌, 위의 8080처럼 특수한 포트 번호의 경우 웹에서 이를 알 수 있는 방법은 없으므로, 접근 시 포트 번호를 명시해주어야 한다.
복잡한 라우팅
1) 정해진 주소뿐만 아니라, 다음과 같이 인자를 받아 그에 따른 정보를 출력하도록 만들 수도 있다
@app.route("/profile/<username>")
def get_profile(username):
return "profile: " + username
@app.route("/first/<username>")
def get_first(username):
return "<h3>Hello " + username + "!</h3>"
2) 아래와 같이 변수에 데이터 타입을 정해줄 수 있으며, default는 문자열이다
@app.route("/message/<int:message_id>")
def get_message(message_id):
return "message id: %d" % message_id
Rest API 이해를 위한 웹 기술 이해 : HTTP 프로토콜
HTTP (HyperText Transfer Protocol)
Request | Example |
---|---|
HTTP Request-Line | HTTP method / Path / HTTP version |
HTTP Request-Header | Host : www.xxxxxxx.com |
HTTP Request-Body (필요시) | Connection : keep-alive 일회성 연결인 HTTP가 요청을 할 때마다 새로 연결되는 것을 방지 |
Response | Example |
---|---|
HTTP Response-Line | HTTP version / Status Code / Status Message |
HTTP Response-Header | Server, Content-type, Content-length |
HTTP Response-Body (필요시) | HTML 데이터 |
REST(REpresentational State Transfer)
자원의 표현에 의한 상태전달로, HTTP URI를 통해 자원을 명시하고, HTTP 메소드를 통해 자원에 대한 CRUD Operation 적용
* CRUD : Create(POST), Read(GET), Update(PUT), Delete(DELETE)
flask로 Rest API 구현과 테스트
특정한 URI 요청에 대한 응답을 JSON 형식으로 작성한다. Flask는 dict 데이터를 응답 데이터로 만들고, 이를 jsonify() 메소드를 활용하여 JSON 응답 데이터로 만들 수 있다.
@app.route('/json_test')
def hello_json():
data = {'name' : 'CESW', 'family' : 'ce'}
return jsonify(data)
위와 같이, json_test라는 새로운 라우팅 경로에서 JSON 응답을 하도록 작성한 후, httpie를 통해 Response를 확인하면 아래와 같이 정보가 나온다