Application/Flask

Flask

DS지니 2021. 3. 22. 16:18
728x90
반응형

Flask는 파이썬을 사용해 작지만 간단하고 유연성있는 웹 어플리케이션을 만들 수 있습니다 :)

 

1. Flask

Micro Web Framwork

 

웹 프레임워크란 웹 어플리케이션을 개발할 수 있도록 Web Service와 Web API 등을 제공하고 웹 개발 과 배포를 할 수 있는 특정 방법을 제공하는 프로그램입니다. 

Flask는 그중에도 Micro '최소한의 도구를 모아놓은 웹 프레임워크` 입니다.

 

#Django(장고)는 파이썬을 사용한 난이도있고 heavy한 웹 어플리케이션을 제작할 수 있는 또다른 프로그램입니다.

 

 

Flask 공식 사이트

flask.palletsprojects.com/en/1.1.x/

 

Welcome to Flask — Flask Documentation (1.1.x)

 

flask.palletsprojects.com

 

2. Flask 파이썬 설치

$ pip install Flask

 

Flask 사용법

quickstart

 

1. 폴더와 파일 생성

flask_app
└── __init__.py

 

2. 파일 안에 코드 작성

#__init__.py

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

1) Flask 불러오기

2) 클래스 인스턴스 만들고 인수에 애플리케이션 모듈(또는 패키지)의 이름 입력하기

  • __name__ : 응용프로그램으로 시작되었을 때
  • __main__ : 모듈로 가져왔을 때

3)  route() : 루트 주소 설정. 주소가 어떻게 끝나는지 알려주는 엔드포인트(endpoint)

4)  사용자의 브라우저에 표시하려는 메시지 반환하는 함수

 

 

3. CLI 실행

FLASK_APP=flask_app flask run

* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 문구가 실행되면 localhost:5000 사이트 접속

 

 

*개발자모드 CLI 실행 (새로고침으로 수정 확인 가능)

#code

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

if __name__ == '__main__':
	app.run(debug=True)
$ export FLASK_ENV=development
$ flask run

 

4. ROUTE 기능

1) 라우팅

@app.route('/')
def index():
    return 'Index Page'

@app.route('/hello')   # URL 루트가 /hello 로 끝남
def hello():
    return 'Hello, World'

 

2) 세부 엔드포인트

작업하는 username, index 등에 따라 해당 번호가 포함된 URL 리턴

엔드포인트 <변수값> 사용 

from markupsafe import escape

@app.route('/user/<username>')
def show_user_profile(username):
    # show the user profile for that user
    return 'User %s' % escape(username)

@app.route('/post/<int:post_id>')
def show_post(post_id):
    # show the post with the given id, the id is an integer
    return 'Post %d' % post_id

@app.route('/path/<path:subpath>')
def show_subpath(subpath):
    # show the subpath after /path/
    return 'Subpath %s' % escape(subpath)
    
@app.route('/index/<num>')
def index_number(num):
    return 'Welcome to Index %i' % int(num)
    
@app.route('/index/', defaults={ 'num' : 0 })  # defalts 값 적용
@app.route('/index/<num>')
def index_number(num):
    return 'Welcome to Index %i' % int(num)

 

3) HTTP 메소드

URL에 액세스 할 떄 다른 HTTP method 사용

from flask import request

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        return do_the_login()
    else:
        return show_the_login_form()

 

5. 블루포인트(bluepoint) 기능

route가 많이 생성될 때 하나의 파일로 모아서 사용하지 않고 기능별로 나눠서 사용.

# 또다른 폴더 생성
flask_app
├── __init__.py
└── routes
    └── 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'
    
    
    
 # __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!'

<bluepoint arguments>

  • 'user' : 블루프린트의 명칭 지정
  • __name__ : 블루프린트 모듈의 import 이름 지정
  • url_prefix='/user' : URL 접두어 설정 (URL의 루트 앞에  '/user' 가 자동으로 붙게 됩니다.

<output>

웹 사이트 localhost:5000/user 에는 'User index page'가 출력됩니다.

웹 사이트 localhost:5000/ 에는 'Hello World!'가 출력됩니다.

 

6. Application Factory

프로젝트가 커지고 파일들이 많아지면 import를 사용할 일이 많아질 것 입니다.

파이썬에서의 circular import를 피하기 위해서 Flask는 어플리케이션 팩토리 패턴을 추천하고 있습니다.

 

Application Factiory는 '공장'을 세우는 것처럼 함수 안에 어플리케이션을 생성해 주어 사용할 수 있습니다.

블루프린트도 함수 내에서 import 해온 뒤 어플리케이션에 추가해줍니다.

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

 

728x90
반응형