- 파이썬을 사용해 웹 어플리케이션을 작성할 수 있도록 도와주는 역할
- 마이크로 웹 프레임워크 : 웹 어플리케이션을 개발할 수 있도록 웹 서비스 (Web Service) 나 웹 API (Web API) 등을 제공하고 웹 개발과 배포를 할 수 있는 특정 방법을 제공합니다. 쉽게 말해 뭔가를 만들어낼 수 있는 도구 모음을 제공 / 마이크로가 붙었으니 최소한의 도구들을 모아놓은 것
폴더 생성
# 이런 구조가 되도록 flask_app이란 파일을 만들고
# 그 안에 __init__.py 파일을 만든다
flask_app
└── __init__.py
# __init__.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello World!'
# 해당 주소에 'Hello World!'가 뜨게 됨
작성 후 CLI에서
$ FLASK_APP=flask_app flask run로 실행
($ FLASK_APP=파일이름 flask run)
Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
→ 이 어플리케이션에 접속할 수 있는 주소
@app.route('/')
어플리케이션의 루트 주소 ('/') 에 접속했을 때에 실행하라는 뜻
괄호 안에 있는 것이 엔드포인트 127.0.0.1:5000 + /
기본적으로 Flask 의 라우트 데코레이터를 사용하게 되면 GET, HEAD, OPTIONS 메소드를 허용한다
POST, PUT, PATCH, DELETE 등 다른 메소드들을 통과하도록 설정하려면 methods=[ ]를 사용한다
# 메소드 추가하기
@app.route('/', methods=['POST', 'GET'])
def index():
...
※ GET 과 POST 라는 메소드가 통과되고 HEAD 와 OPTIONS 라는 메소드들은 이제 사용이 불가능하다
route를 설정할 때 엔드포인트에 꺽쇠 (< >) 모양으로 어떠한 변수를 받겠다고 설정할 수 있다
@app.route('/index/<num>')
def index_number(num):
return 'Welcome %i' % int(num)
→ http://127.0.0.1:5000/index/5 에 접하게 되면 Welcome 5 출력
※ 기본적으로 URL 을 통해 들어오게 되는 값은 문자열 타입이어서 숫자로 변형해줘야 한다
처음부터 받을 때에 타입을 지정할 때에는 이렇게 표기한다 @app.route('/index/<int:num>')
# 숫자가 안 주어지면 0 을 기본으로 설정해주는 방법
@app.route('/index/', defaults={ 'num' : 0 })
@app.route('/index/<num>')
def index_number(num):
return 'Welcome %i' % int(num)
- 라우트들을 하나의 파일로 모아서 사용하지 않고 기능별로 나눠서 블루프린트 기능을 사용한다
- 블루프린트는 Flask 에서 여러 개의 라우트를 한 곳에 묶어둘 수 있는 기능이 있다
파일의 구조
# routes 라는 폴더를 만들어 그 안에 user_routes.py 라는 파이썬 파일을 생성
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'
위에서 Blueprint 의 인수로 들어가는 것은 다음과 같다
그리고 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!'
...
init.py 파일에서 다음과 같은 코드가 들어간다
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()
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')