cmd 활용
# 가상환경 폴더 생성
D:\> mkdir venvs
# 해당폴더 이동 후
D:\> cd venvs
# 가상환경 생성
D:\venvs> python -m venv 프로젝트 이름
d:/song/practice/project1/web
Flask app이 담길 폴더(각자에 맞게 생성)
해당 폴더에 Flask 관련 파일 정리
flask app의 기본설정 (ex - app 이름 , debuging 설정 등)을
가상환경 시작과 함께 적용하기 위해
기본설정을 담은 cmd파일로 만들어 두면 편하다.
D:\venvs> 에서 jeju.cmd 파일 생성
파일내용
@echo off
d:
cd d:/song/practice/project1/web
set FLASK_APP=jeju
set FLASK_DEBUG=true
d:/song/venvs/jeju/scripts/activate
명령어를 화면에 표기하지 않는다
@echo offd: 드라이브로 이동 (C드라이브에 파일, 가상환경 만들었으면 제외)
d:Flask app이 있는 폴더로 이동
cd d:/song/practice/project1/webFlask app의 이름을 jeju로 사용하겠다 (base folder내의 폴더이름으로)
ex) 저의 경우 app 이름이 jeju이고 base folder인 web아래에 같은 이름으로 폴더 생성
폴더 이름과 app 이름이 반드시 일치해야한다.
d:/song/practice/project1/web/jeju
set FLASK_APP=jejuFlask app동작시 debuging을 해주세요
set FLASK_DEBUG=true
가상환경 작동
d:/song/venvs/jeju/scripts/activate
__init__.py[파일명] d:/song/practice/project1/web/jeju/__init__.py
# flask 패키지
from flask import Flask
# app 구동을 위한 부분
# 함수이름(create_app)과 return 부분의 이름은 그대로 사용
# def create_app(): 이 만들고자 하는 app의 실행과정을 설명하는
def create_app():
# app의 이름
# cmd 옵션에서 set FLASK_APP=jeju로 설정하여서
# app 이름은 jeju로 설정됨
app = Flask(__name__)
# 앱이 실행되면
# def start()의 내용을 'http://127.0.0.1:5000/' 주소에 나타내주세요!
# 즉, http://127.0.0.1:5000 뒷부분의 주소를 결정
@app.route('/')
def start():
return 'Start!'
return app # 변경 불가!
a. cmd 창에서 jeju.cmd 파일을 실행 -> 가상환경 진입 / 폴더 변경
b. flask run -> Flask 실행
c. http://127.0.0.1:5000 주소 실행
ex) cmd 창 예시
C:\Windows\system32>jeju
(jeju) d:\song\practice\project1\web>flask run
* Serving Flask app 'jeju'
* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:5000
Press CTRL+C to quit
* Restarting with stat
* Debugger is active!
* Debugger PIN: 127-131-603
web -> base folder
│
├─ jeju
│ ├── static (image, css 와 같은 양식을 담기 위한 폴더)
│ │ ├── bootstrap.min.css
│ │ └── bootstrap.min.js
│ │
│ ├── templates (구현하고자 하는 html)
│ │ ├── weather
│ │ │ ├── weather.html
│ │ │ ├── show_weather.html
│ │ │ └── show_pm.html
│ │
│ ├── views (html 파일 routing과 해당 html에 필요한 정보를 보내는 py파일)
│ │ │ ├── info_views.py
│ │ │ ├── main.py
│ │ │ └── weather_views.py
│ │
│ ├── __init__.py (flask app - 여기선 jeju에 관한 정보, blueprint 등)
│ │
│ ├── filter.py (프로젝트 내에서 사용하고자 하는 함수들)
│ │
│ ├── models.py (연동 sqlite 데이터 모델)
│ │
├─ migrations (sqlite 연동과 관련된 폴더 - migrate시 자동생성)
│ ├── versions
│ │ └── etc....
│ └── etx..
│
├─ config.py (환경설정 파일)
│
├─ jeju.db (db파일)
└── requirements.txt
__init__.py에 모든 내역을 관리 할 수 있지만, 효율적인 코드 관리를 위해 사용하는 기능
다양한 views파일을 만들고 각기 다른 화면(html)을 관리하도록 하기 위해 blueprint 기능을 사용
-> __init__.py파일과 다른 view파일들을 연결한다고 생각하면 편할듯
[파일명] d:/song/practice/project1/web/views/main_views.py 생성
from flask import Blueprint, url_for
from werkzeug.utils import redirect
### main_view.py에 생성하는 route에 대한 정보 작성
# 'main'이라는 묶음으로 사용하고, routing되는 주소의 접두사
# 향후 실제 예를 통해 재설명 예정
bp = Blueprint('main', __name__, url_prefix='/')
### blueprint를 사용하지 않을때는 @app.route('/') 사용
### blueprint를 사용하게 되면 @bp.route('/') 사용
@bp.route('/')
def select1():
### return 부분 - 해당 파일이 표현할 html을 연결
# 아래 설명참고
return redirect(url_for('select1.open_select1'))
✅ return에 필요한 내용
blueprint를 사용하기 위해서는 base 파일인 __init__.py에 적용하고자 하는 blueprint의 내용을 등록하여하 한다.
App 구동의 가장 기본 설정이 담기는 파일
각 부분의 설명은 코드 참조
[파일명] d:/song/practice/project1/web/jeju/__init__.py 변경
from flask import Flask
def create_app():
app = Flask(__name__)
# 사용하고자 하는 Blueprint를 불러오고
from .views import main_views
# app에 blueprint로 등록한다.
app.register_blueprint(main_views.bp)
return app
✅ app.register_blueprint(블루프린트 내용)
불러오는 파일이름.bp 형태로 작성
❓ 위의 순서대로 진행할 경우 에러가 발생한다.(사진 첨부예정)
main_views를 통해 http://127.0.0.1:5000/ 로 접속시 select1.open_select1로 redirect 하도록 하였는데 현재 select1라는 blue print를 만들지 않았기 때문에 에러가 발생한다. ✅ Flask를 진행할때 위와 같은 오류를 상당히 많이 만나게 될 것이다.
✅ 위의 오류 설명
✅ 새로운 페이지를 구성하기 위해는 3단계를 거처야 한다.
__init__.py에 blueprint 기능 추가✅ 항상 이 순서를 기억
✅ 이 순서에 따라 틀을 먼저 만들고, html파일과 views파일을 수정하는 것이 확인을 위해 편하다.