Flask - project start

황인용·2020년 1월 29일
1

Flask

목록 보기
2/13

이전에 Flask-intro 블로그에서 살펴본 Flask를 본격적으로 시작하고자 한다.

간단하게 http 메소드를 get으로 api로 요청하면 응답을 받는 endpoint를 구축해보자

1. mkdir project

  • 프로젝트를 시작할 디렉토리를 만든다
(base) $ mkdir -p ~/develop/api
  • mkdir : "Make Directory"의 약자로, 새로운 디렉토리를 생성해주는 리눅스 명령어

  • -p : mkdir의 옵션, 디렉토리의 중간 경로가 존재하지 않으면 자동으로 생성

2. app.py 생성

(base) $ cd ~/develop/api
(base) $ vim app.py
  • 프로젝트 디렉토리에서 app.py를 생성하고 endpoint 기능에 대한 code를 작성한다
# /develop/api/app.py

from flask import Flask #1)

app = Flask(__name__) #2)

@app.orute("/ping", methods=['GET']) #3)
def ping(): #4)
  return "pong"

1) Flask를 사용하기 위해서 먼저 Flask를 import한다

2) import한 Flask 클래스를 객체화(instantiate)하여 app이라는 변수에 저장한다
app 변수가 바로 API 어플리케이션이다(정확히 Flask 웹 어플리케이션)

3) Flask route 데코레이터(decorator)를 사용하여 Endpoint를 등록한다.
HTTP metods는 GET으로 설정하였다.

4) ping 함수(메소드)를 정의하였다. route 데코레이터를 통해 엔드포인트로 등록된 함수이다.
이 ping 함수(메소드)를 요청하면 "pong"을 리턴한다.

3. API 실행하기

  • API 즉, endpoint를 실행하기 위해서는 server를 구동해야한다.

  • server를 구동하기 위해서는 python flask가 설치된 가상환경에서 구동해야한다.

  • 그리고 앞서 만들었던 app.py가 위치한 디렉토리에서 다음과 같은 명령어로 server를 구동한다.

(base) $ conda activate develop
(develop) $ FLASK_APP=app.py FLASK_DEBUG=1 flask run
  • FLASK_APP=app.py : Flask_APP 환경변수에는 Flask를 실행시키는 파일을 지정해주면된다. 따라서 우리가 작성한 파일 app.py를 지정해주면된다.

  • FLASK_DEBUG=1 : FLASK_DEBUG 환경 변수를 1로 지정해 놓으면 디버그(debug)모드가 활성화된다. 디버그 모드가 활성화 되면 코드가 수정되었을때 어플리케이션을 다시 실행할 필요 없이 자동으로 재시작되어 수정된 코드가 반영된다.

  • flask_run : flask server를 구동하면 기본적으로 localhost:5000으로 구동된다.(=http://127.0.0.1:5000)

4. httpie 테스트

(develop) $ http -v GET localhost:5000/ping
GET /ping HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Host: localhost:5000
User-Agent: HTTPie/0.9.8



HTTP/1.0 200 OK
Content-Length: 4
Content-Type: text/html; charset=utf-8
Date: Wed, 29 Jan 2020 11:54:08 GMT
Server: Werkzeug/0.16.1 Python/3.7.6

Pong
  • http -v : http명령어를 사용하여 http요청을 보낼 수 있다.

  • -v : -v옵션은 "verbose"옵션으로 해당 HTTP 요청과 응답에 관한 추가적인 정보를 출력한다

  • GET : 해당 http 요청은 "GET" method를 요청하는 것이다

  • localhost:5000/ping : api의 주소로 localhost는 127.0.0.1 즉, 자기 자신을 가르키며, 5000은 통신 포트(port)번호를 말한다
    /ping은 RESTful API 기반 주소이다

정리

  • Flask에서는 일반적으로 route 데코레이터를 사용하여 메소드들을 엔드포인트로 등록하는 방식이다

  • Flask에서 엔드포인트를 구현한다는 것은 결국 일반 함수(메소드)를 구현하는 것이다.

  • 구현되는 함수(메소드)는 비즈니스 로직(business logic)을 구현하는 것이다.

profile
dev_pang의 pang.log

0개의 댓글