FLASK

seongyong·2021년 6월 7일
0

데이터 엔지니어링

목록 보기
9/11

학습내용

FLASK

FLASK : 파이썬을 사용해 웹 어플리케이션을 작성할 수 있도록 도와주는 프레임워크

특징 : : 웹 어플리케이션 프레임워크, 가장 최소한의 기능들을 모아놓았기 때문에 Django에 비해 가볍다.

  • 설치
pip install flask
  • 폴더 생성
flask_app
└── __init__.py
  • init.py 파일
from flask import Flask

app = Flask(__name__)

@app.route('/', methods=['POST', 'GET'])
# /주소로 들어가게되면 return, 기본 메소드가 GET, HEAD, OPTIONS이고  따로 지정하면 다른메소드도 사용가능
def index():
	return 'Hello world'

@app.route('/index/', defaults={'test' : 0})
@app.route('/index/<test>') #<>로 변수설정도 가능
def index_test(test):
	return f'Welcome to {test} world'
  • 웹 어플리케이션 실행 및 환경설정
FLASK_APP=flask_app flask run
#export FLASK_APP=flask_app 후에 flask run도 가능
#export FLASK_ENV=development 로 개발자모드 run 가능

블루프린트

기능이 많이질수록 라우트도 많아진다. 라우트들을 하나의 파일로 사용하지 않고 기능별로 나눠서 블루프린트 기능을 사용

  • 구조
flask_app
├── __init__.py
└── routes
    └── user_routes.py
  • user_routes.py
# user_routes.py

from flask import Blueprint

bp = Blueprint('user', __name__, url_prefix='/user')

@bp.route('/')
def index():
    return 'User index page'
  • 'user' : 블루프린트의 명칭

  • __name__ : 블루프린트의 import 이름

  • url_prefix='/user' : URL 접두어 설정 (해당 블루프린트의 라우트는 URL 앞에 '/user' 가 자동으로 붙게 됨)

  • __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 ~~

Application Factory

여러 개의 어플리케이션을 동시에 사용하거나 app 이 선언되어 있는 파일의 일부분만 필요할 때 유용함. app을 실행시키는 함수를 따로 선언해주는 것.

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()

Jinja 템플릿

flask에서는 html파일들을 따로 저장해놓고 웹에 사용되도록 rendering할 수 있다. render_template를 함수를 이용한다.
기본적으로 프로젝트 폴더 내에 'templates' 라는 이름의 폴더를 기본 경로로 설정한다.
from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
  return render_template('index.html')

jinja는 html을 렌더링할때 변수를 사용할 수 있게끔 해준다.

@app.route('/')
def index():
    apple = 'red'
    apple_count = 10
    return render_template('index.html', fruit_color=apple, number=apple_count)

html 파일

<body>
  <h2>Apple is {{ fruit_color }}</h2>
  <h2>{{ apple_count }} 개의 과일이 있습니다.</h2>
</body>
  • {% ... %} : 구문에 사용 (if, for 등)
  • {{ ... }} : 템플렛 결과 (html) 에 출력할 표현 (변수 등)
  • {# ... #} : 주석 처리할 때 사용

Jinja 템플릿 상속기능
{% extends %} : 상속받는 파일을 지정
{% block %} ... {% endblock %} : 상속된 파일에서 변경할 수 있는 일종의 HTML '블록' 들을 지정

위의 두 가지를 사용하여 상속

  1. base.html
<!DOCTYPE html>
<html lang="en">
<head>
    
</head>
<body>
    <div id="content">{% block content %}{% endblock %}</div>
</body>
</html>
  1. child.html
{% extends "base.html" %}
{% block content %}
	{{ supoer() }} #자식 블록에서 부모블록 가져오기 가능

    <h1>Index</h1>
    <p class="important">
      Welcome to my awesome homepage.
    </p>
{% endblock %}

0개의 댓글

관련 채용 정보