본문 바로가기

TIL/Python

[Python][Flask] 플라스크가 뭘까? -1

파이썬을 이용한 웹 프레임 워크는 다양하다.

내가 처음 사용하게될 flask 와 더불어 Django FastAPI 등등

 

나는 프레임워크 자체를 처음 접하는 것이니 가벼운 것을 사용해보고 세팅해보기로 한다.

flask와 주로 사용되는 Django 의 차이에 대해 잘 다뤄진 포스트들을 참조해보자.

 

우선 flask 의 공식홈페이지

https://flask.palletsprojects.com/en/2.1.x/

 

Welcome to Flask — Flask Documentation (2.1.x)

 

flask.palletsprojects.com

 

flask는 microframework 로 여겨지는데 간단하지만 핵심적이고 확장가능한 프레임워크로 

어떤 데이터베이스를 사용할지 어떤 엔진을 사용할지와 같은 결정은 사용자에게 달렸다.

 

다른 라이브러리는 이미 가지고 있고 사용할 수 있는 컴퓨터와 데이터베이스간의 통신을 통합하는 앱인터페이스나 폼검증같은 것들은 없다.

 

대신 플라스크 자체에서 구현되는 앱에 함수(?)로 더할수 있다(?)

다양한 extensions들이 데이터 통합이나 폼검증, 다양한 검증기술 같은 것을 제공한다.

애플리케이션의 파이썬 소스트리안의 하위디렉토리에 펨플릿과 정적파일(css,html.javascipt)이 저장되어 있다.

 

SQLAlchemy 의 고급패턴이나 다른 데이터베이스 도구 등을 구현할 수 있다.

 

0.설치하기

flask 는 python3.7이상을 지원한다.

flask 을 설치할 때 같이 설치되는 것들이 있다.

 

Werkzeug (독일어로 도구라는 뜻) : WSGI를 구현하는 도구

Jinja : 애플리케이션 서버를 랜더링하는 언어(꾸며줄 수 있다.)

MarkupSafe : 진자와 같이 사용하는 것으로 신뢰할 수 없는(로봇)같은 입력에 빠져나올수 있도록 한다.

ItsDangerous : 데이터를 확실하게 하는 것

Click :명령어작성을 위한 프레임워크

 

그외 추가적으로 필요에 따라 설치하고 사용할 수 있는 것들도 있다.

 

1) venv : virtual enviornments

프로젝트의 독립성(?)을 관리하기 위해 venv을 사용해라 개발할 때나 배포할 때나.

다양한 파이썬 프로젝트를 가지게 되거나 다양한 버전의 파이썬의 라이브러리를 필요할 때 다른 프로젝트의 호환성을 부술 수 있다.

 

venv는 각 프로젝트를 위한 파이썬라이브러리의 독립된 그룹으로 운영체제 시스템이나 다른 프로젝트에 영향을 끼치지 않는다.

필요로한 폴더안에

(mac OS)

python3 -m venv venv

와 같이 venv을 만들고

활성화 한다.

. venv/bin/activate

그리고 활성화 된 환경에서 flask을 설치한다.

pip install flask

 

2.간단한 사용

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"

위에서 활성화한 환경에 플라스크까지 설치를 완료했다면 위와 같은 코드를 실행해보자

 

터미널에 FLASK_APP의 환경변수 값을 파일이름으로 선언하고 run을 명령한다.

export FLASK_APP=hello
flask run
 * Running on http://127.0.0.1:5000/



이때 불러올 파일이름을 app.py나 wsgi.py와 같은 것으로 저장하지 말자 오류가 발생한다. 

콘솔창에 위와 같은 메세지가  뜨는데 저 url 주소로 가면 아래와 같은 웹이 뜬다. 

다만 이건 나의 로컬 컴퓨터 안에 있는 주소이다.

이제는 저 위 코드의 의미를 살펴보자

 

from flask import Flask

:flask 프레임워크에서 WSGI를 위한 Flask 클래스를 호출한다. 

app = Flask(__name__)

Flask 클래스의 인스턴스를 만든다.

@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"

라우터 데코레이터를 사용한다. 

플라스크에게 어떤 주소가 함수를 실행시킬지 말해준다.

예를 들면

@app.route("/name")
def hello_world():
    return "<h1>Hello, World!</h1><p>what is your name?</p>"

url 주소창에 /name 을 추가하면