섹션 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를 확인하면 아래와 같이 정보가 나온다

태그:

카테고리:

업데이트: