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