본문 바로가기
Python/Flask

[Flask] 2. 플라스크 개발 기초(점프 투 플라스크 - Mac)

by mine-dong 2021. 11. 29.

플라스크는 프로젝트의 구조의 규칙이 존재하지 않는다. 따라서 프로젝트 구성에서 고민을 많이 해봐야한다.

 

플라스크 프로젝트 구조

이 실습에서 사용될 파이보 프로젝트의 구조이다.

├── pybo/
│      ├─ __init__.py
│      ├─ models.py
│      ├─ forms.py
│      ├─ views/
│      │   └─ main_views.py
│      ├─ static/
│      │   └─ style.css
│      └─ templates/
│            └─ index.html
└── config.py

pybo가 패키지로 변경되면서, 기존 pybo.py의 역할을 __init__.py가 대신 해주게 된다.

models.py

- 현재 진행하는 파이보 프로젝트는 ORM(object relational mapping)을 지원하는 파이썬 DB 도구인 SQLAlchemy를 사용한다. SQLAlchemy는 모델 기반으로 데이터 베이스를 처리하기 때문에 models.py에 모델 클래스를 정의할 것이다.

forms.py

- 파이보 프로젝트는 웹 브라우저에서 서버로 전송된 폼을 처리할 때 WTForms라는 라이브러리를 사용한다. 이 역시 모델 기반으로 폼을 처리하기에 forms.py에 폼 클래스를 정의할 것이다.

views

- views 디렉터리에는 뷰 파일들을 저장한다. (main_views.py, question_views.py 등)

static

- static 디렉터리에는 스타일 시트(.css), 자바스크립트(.js), 이미지 파일(.jpg, .png) 등이 저장된다.

templates

- 이 디렉터리에는 html파일을 저장한다. 

config.py

- 파이보 프로젝트의 환경변수, 데이터베이스 등 환경 설정이 이 파일에 저장된다.

 


 

플라스크 애플리케이션 팩토리 사용

pybo.py에 작성했던 app = Flask(__name__) 코드를 보면 플라스크 앱은 Flask 클래스로 만든 객체라는 것을 알 수 있다.

플라스크는 app 객체를 사용해 여러 가지 설정을 진행하는데, 이 같은 방식으로 app 객체를 전역으로 사용하면 "순환 참조 오류"와 같은 문제가 발생할 확률이 높아진다.

 

이렇게 전역으로 객체를 사용할 때 발생하는 문제를 해결하기 위해 "애플리케이션 팩토리"를 사용할 것을 플라스크 공홈에서 알려준다.

 

1. pybo.py를 __init__.py 파일로 변경

먼저 아래 명령어로 projects, myproject 하위 디렉터리로 pybo를 만들어준다.

mkdir pybo

그 다음 pybo.py 를 pybo디렉터리 안 __init__.py로 넣어준다.

mv pybo.py pybo/__init__.py

 

2. 애플리케이션 팩토리 사용

__init__.py 파일을 create_app함수를 사용하는 방식으로 변경해준다.

from flask import Flask

def create_app():
	app = Flask(__name__)
   
   @app.route('/')
   def hello_pybo():
   	return 'Hello, Pybo!'
    
   return app

여기서 사용된 create_app 함수가 바로 애플리케이션 팩토리이다. 함수명인 create_app은 플라스크 내부에서 정의된 함수이므로 변경시 정상 작동하지 않는다.

 

마지막으로 flask run으로 터미널에 명령어를 입력하여 플라스크 서버가 잘 실행되는 것을 확인할 수 있다.

'Python > Flask' 카테고리의 다른 글

[Flask] 1. 플라스크 개발 준비(점프 투 플라스크 - Mac)  (2) 2021.11.03