본문 바로가기

Language/파이썬

[Python] Flask

반응형
flask

간단한 API 호출을 위한 웹 서버가 필요해서 flask 프레임워크를 사용해 구축하려고 한다. Spring, PHP, nodejs, django 등 많은 프레임워크가 있고 쓸 수도 있겠지만 두 가지 이유에서 flask를 선택했다. 간단하고 빠르게 개발이 가능하고 파이썬 언어를 사용하기 때문이다. 혼자서 개발하고 규모도 크지 않아 적절한 선택이라고 생각한다. flask로 직접 개발해본적은 없지만 쉽게 원하는 기능을 만들 수 있을것 같다.

개발 환경은 ubuntu16.04LTS, python3.6으로 진행했다.

 

모듈 설치

flask도 파이썬 모듈이기 때문에 pip로 설치 가능하다.

 

앱 생성

app.py파일을 만들고 코드를 작성한다.

  • app.run()을 호출해서 서버를 실행한다.
  • 라우팅은 @app.route("*") 처럼 데코레이터 형태로 구현 가능하다.

위 코드를 실행하면 아래와 같이 창이 생성된다.

 

라우팅

라우팅 구현에 대해 더 상세히 확인해보려 한다. 여러 기능을 수행하는데 필요한 기능이다.

  • @app.route()에 경로를 추가해준다. 지정한 경로로 접속할 경우 해당 함수가 호출된다.
  • 슬래시(/) 다음에 <> 변수를 지정하고 동일한 이름의 변수를 파라미터에 준다. int:{변수이름}식으로 타입도 지정할 수 있다.

 

Request

HTTP 프로토콜을 최대한 활용하기 위해 REST API 형태로 구성한다. 이를 통해 GET, POST, PUT, DELETE 같은 요청 메소드에 따라 여러 기능을 구분해 개발한다. 각 요청 메소드를 flask에서는 어떻게 처리하는지 봤다.

  • app.route의 methods 인자에 GET, POST, PUT, DELETE를 지정해 처리할 메소드를 선택한다. 배열 형태로 전달되기 때문에 한 함수로 여러 타입의 메소드를 처리할 수 있다.

  • request 모듈을 통해 요청 파라미터를 가져온다.

    • GET의 경우 URL의 뒤에 ?key1=value1&key2=value2 형태로 파라미터가 전달된다. 이 파라미터들을 request.args를 통해 가져온다.
    • POST의 경우 request.form을 통해 form 타입으로 전송된 요청 파라미터를 받는다.
    • POST 요청을 보낼때도 GET처럼 URL의 뒤에 요청 파라미터를 받을 수 있다. 이 때도 동일하게 request.args를 사용한다.

JSON

요청에 JSON 타입을 보내는 경우 아래와 같이 처리할 수 있다.

  • request.get_json()을 통해 요청의 body에 들어있는 json 값을 가져온다.

 

Response

클라이언트에서 요청을 보내면 서버에서는 그에 따른 응답 메시지를 보낸다. 클라이언트에 보내는 내용은 HTML 페이지, 문자열, JSON, 파일 등 다양하다. HTML 파일과 JSON 응답을 보내는 방법은 아래와 같다.

HTML

정적 파일들은 프로젝트 디렉토리 안에 templates라는 폴더 안에 생성한다. html, css, js 파일들을 여기에 넣어줘야 한다.

위처럼 정적 파일을 구성한다.

  • render_templates함수로 html 파일을 지정한다.

JSON

flask 모듈에 jsonify 함수를 사용하면 간단히 JSON 형태의 응답을 보낼 수 있다.

  • 파이썬의 dictionary 자료형을 jsonify에 전달하면 JSON 응답을 만들 수 있다.
  • jsonify의 인자로 key=value를 전달하는 방식으로도 응답을 생성할 수 있다.

 


위 내용들을 확인하면 간단히 서버 구축이 가능할 것 같다.

반응형

'Language > 파이썬' 카테고리의 다른 글

[Python] Queue  (0) 2021.03.05
[Python] GIL  (0) 2021.03.04
[Python] 함수 인자  (0) 2021.01.20
[Python] Pyenv  (0) 2020.03.24
[Python] Visdom  (0) 2020.01.12