FrameWork/Flask
초기 세팅
mansoorrr
2024. 4. 17. 09:28
app을 만들기 위해 초기 세팅을 진행한다.
[config]
- 개발시 사용할 db 주소 정의
- session발급시 사용될 application secret_key 정의
#----------------------------------- config.py 내용
import os
secret_key = "flask_secret_key" #개발 시크릿 키
#----------DB로 SQLITE를 사용하고자 할 경우
BASE_DIR = os.path.dirname(__file__)
SQLALCHEMY_DATABASE_URI = f"sqlite:///{os.path.join(BASE_DIR, 'pybo.db')}"
SQLALCHEMY_TRACK_MODIFICATIONS = False
#----------DB로 mysql을 사용하고자 할 경우
pip install mysql-connector-python실행
db = {
'host':'localhost',
'port': 3306,
'password': 'password',
'user': 'username',
'db': 'dbname'
}
SQLALCHEMY_DATABASE_URI = f"mysql+mysqlconnector://{db['user']}:{db['password']}@{db['host']}:{db['port']}/{db['db']}?charset=utf8"
SQLALCHEMY_TRACK_MODIFICATIONS = False
- 위와같이 초기 config를 설정한 후 app에 등록(플라스크에서 많이 보이는 패턴: 설정 > 등록)
#---------- app.py 내용
import os
from flask import Flask, config
import config
def create_app():
app = Flask(__name__)
#config 등록
app.config.from_object(config)
return app
[db 정의]
- db등록을 위해 pip install flask-migrate 실행
- db는 app.py의 create_app 외부에 전역변수로 정의
- migrate도 함께 전역변수로 정의
- app에 등록
#---------- app.py 내용 수정
from flask_migrate import Migrate #추가
from flask_sqlalchemy import SQLAlchemy#추가
db = SQLAlchemy()
migrate = Migrate()
def create_app():
app = Flask(__name__)
<..생략..>
#db등록(추가)
db.init_app(app)
migrate.init_app(app, db)
@app.route('/')
def index():
return 'hello'
return app
[blueprint 정의]
- app.py에 계속 route를 하면 함수가 엄청 많아지기 때문에 분리해서 관리한다.
- 블루프린트를 정의하고 나서는 app에 등록해야 한다
- 아래 예시에서는 사용자에 대한 rest api들은 user_views.py에서 관장할 것이기 때문에 user_views.py에 블루프린트를 만들고 app에 등록하는 과정을 거쳤다.
#---------- user_views.py
from flask import Blueprint
#127.0.0.1:5000/user 라는 이름으로 api를 관리하겠다
bp = Blueprint('user', __name__, url_prefix='/user')
@bp.route('/index') #127.0.0.1:5000/user/index로 요청이 들어오면 아래 함수를 실행하겠다.
def index():
return 'hello'
@bp.route('/blueprint') #127.0.0.1:5000/user/blueprint로 요청이 들어오면 아래 함수를 실행하겠다.
def bluprint():
return 'hello blueprint'
#---------- app.py
def create_app():
app = Flask(__name__)
<..생략..>
import user_views
app.register_blueprint(user_views.bp) #블루프린트 등록
'''
이부분 삭제
@app.route('/')
def index():
return 'hello'
'''
return app