[데이터 엔지니어링] Flask

Colacan·2022년 4월 11일
1

Flask란?

  1. 파이썬을 사용해 가벼운 웹 애플리케이션을 작성할 수 있게 도와준다
  2. 웹 애플리케이션을 개발할 수 있도록 웹서비스,웹 API제공한다.
    (일종의 도구모음)
  3. 마이크로 웹 프레임워크다.
    (최소한의 크기로 줄여진 형태)

Flask사용법

  1. 설치
$ pip install flask
  1. 폴더 생성
flask_app
└── __init__.py
  1. Flask 애플리케이션 생성
# __init__.py 에 코드가 담긴다.
from flask import Flask
app = Flask(__name__)
  1. CLI 로 실행
# CLI로 시행시 상위디렉토리에서 실행한다.
$ FLASK_APP=flask_app flask run
  1. 라우트 추가

URL에 따라 실행할 함수 지정
즉, /는 엔드포인트를 의미한다
동일한 라우트가 여러개 있는 경우 가장 먼저 엔드포인트 조건이 맞는 라우트 사용

# __init__.py 에 코드가 담긴다.
from flask import Flask
app = Flask(__name__)
# 애플리케이션의 루트주소에 접속했을 때 실행
@app.route('/')
def index():
    return 'Hello World!'
  1. HTTP Request 메서드

Flask 의 라우트 데코레이터를 사용할 때
기본적 허용 메서드 : GET, HEAD, OPTIONS
methods 인자 사용 메서드 : POST, PUT, PATCH, DELETE

@app.route('/', methods=['POST', 'GET'])
def index():
    ...
  1. 세부 엔드포인트

라우트 설정시 엔드포인트에 <>를 사용하여 변수를 받을 수 있다.

# <>안에서 타입변경 가능하다.
@app.route('/index/<num>')
def index_number(num):
# 인수는 문자열타입으로 들어온다.
    return 'Welcome to Index %i' % int(num)

값을 넘겨주지 않을 경우 아래와 같다.

@app.route('/index/', defaults={ 'num' : 0 })
@app.route('/index/<num>')
def index_number(num):
    return 'Welcome to Index %i' % int(num)
  1. 블루프린트

라우트를 기능별로 나누는 것

flask_app
├── __init__.py
└── routes
    └── user_routes.py

user_routes.py 안에는 아래의 코드를 작성한다.

# user_routes.py
from flask import Blueprint
# 블루프린트 명칭, 블루프린트 import이름, URL 접두어의미
bp = Blueprint('user', __name__, url_prefix='/user')
@bp.route('/')
def index():
    return 'User index page'

init.py에서 불러와서 사용가능하다.

# __init__.py
from flask import Flask
from flask_app.routes import user_routes
app = Flask(__name__)
app.register_blueprint(user_routes.bp)
@app.route('/')
def index():
    return 'Hello World!'

Application Factory

  1. circular import (순환참조)를 피하기 위해서 팩토리 패턴을 만드는 것.

애플리케이션을 만드는 함수를 만든다.

from flask import Flask

def create_app():
    app = Flask(__name__)
    from yourapplication.views.admin import admin
    from yourapplication.views.frontend import frontend
    app.register_blueprint(admin)
    app.register_blueprint(frontend)
    return app
if __name__ == "__main__":
  app = create_app()
  app.run()

Flask의 HTML 렌더링

  1. 파이썬 코드에서 직접적으로 HTML 리턴이 가능하다.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
    return '''
     <html>
      <head>
        <title>
          HTML Page
        </title>
      </head>
      <body>
        <h1>Writing HTML...</h1>
      </body>
     </html>
     '''
  1. 위의 코드는 문제가 많다. 따라서 새로운 방법을 이용한다.

Flask의 render_template를 이용한다.
폴더내에 HTML파일을 넣어놓고 불러온다.

from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
# 폴더를 지정시 html의 경로를 지정해준다.
  return render_template('index.html')
profile
For DE, DA / There is no royal road to learning

0개의 댓글