[점프투플라스크] 2장. 플라스크 기초 정리본 1부(프로젝트, 어플리케이션팩토리, 블루프린트)
in Development on Flask
점프 투 플라스크라는 입문서가 나타났다. 살았다. 따라하면서 공부해보자.
2장. 플라스크 기초
2-01 프로젝트의 구조
c:/projects/myproject
├── pybo/
│ ├─ __init__.py
│ ├─ models.py # ORM(SQL에서 발전한 방식)을 지원하는 SQLAlchemy(파이썬 디비 툴킷)처리 해야되서
│ ├─ forms.py # 브라우저에서 서버로 전송된 폼을 처리하기 위해서 WTForms라는 라이브러리를 사용
│ ├─ views/
│ │ └─ main_views.py # 라우트함수 계속 써야되면 불편하니까 블루프린트를 이용해서 여기에 싹다 모아놓는다.
│ ├─ static/
│ │ └─ style.css # 정적인거 css, js, jpg, png 이런거 저장
│ └─ templates/
│ └─ index.html # 예를들어 여기서 파이보의 질문목록, 질문상세등의 HTML 파일을 저장하는 디렉터리
└── config.py # 프로젝트의 환경변수등을 저장하는 파일
2-02 어플리케이션 팩토리
- init.py
: 파이썬 파일을 모듈화 하는 거.(pybo 디렉토리를 만들어서 pybo.py
를 __init__.py
로 수정하는거라고 보면 쉽게 이해될거다.)
[C:\projects\myproject\pybo.py] -> [C:\projects\myproject\pybo\__init__.py]
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_pybo():
return 'Hello, Pybo!'
- 어플리케이션 팩토리
: app = Flask(__name__)
방식은 app을 전역변수로 사용하기 때문에 프로젝트 규모가 커질수록 문제가 발생할 소지가 많아진다.
그래서 어플리케이션 팩토리를 사용해야 된다(예시에서는 create_app로 묶는다.)
```python
from flask import Flask
def create_app():
app = Flask(__name__)
@app.route('/')
def hello_pybo():
return 'Hello, Pybo!'
return app
2-03 블루프린트
: 라우트함수(@app.route로 매핑되는 함수)들은 기능이 필요할때마다 계속 추가되어야 하므로 create_app 함수내에 이러한 함수들을 계속 추가하는 것은 불편하다.
그러므로, main_views.py
에다가 blueprint로 싹다 라우트함수들을 집어 넣어주고 __init__.py
에 그 만든 blueprint로 불러오기만 하면 된다.