플라스크 프로젝트 구조

Salman Mehmood 2024년2월15일
플라스크 프로젝트 구조

이 설명과 함께 Flask 및 Python의 청사진 접근 방식을 사용하여 대규모 Flask 애플리케이션을 구조화하는 방법을 배웁니다.

Flask 및 Python의 Blueprint 접근 방식을 사용하여 Big Flask 애플리케이션 구조화

우리는 Flask 설명서가 Flask 청사진에 대해 작성했음을 알고 있습니다. 그래도 초보자가 Flask 문서를 읽는 것만으로는 Flask 애플리케이션을 구성하는 방법을 이해하기 어려울 때가 있습니다.

따라서 간단한 단어를 사용하여 이를 분해하고 Flask Blueprint 클래스를 사용하여 Flask 애플리케이션을 구성하는 방법을 설명하고자 합니다.

작업을 시작하기 위해 가상 환경을 만들고 다음 명령을 사용하여 Flask를 설치합니다. 가상 환경을 만든 후 이를 활성화하고 Flask 패키지를 설치합니다.

python -m venv our_venv
.\our_venv\Scripts\Activate.ps1
pip install flask

청사진을 사용하면 Flask 애플리케이션의 다른 인스턴스를 만들고 다른 패키지의 일부 코드를 재사용할 수 있으므로 항상 처음부터 작성할 필요가 없습니다.

먼저 app이라는 디렉토리를 만듭니다. root 디렉토리 안에 run.py라는 파일을 생성합니다. 앱 디렉토리 안에는 이 앱 디렉토리를 만들어 Python으로 패키지를 만들고 __init__.py 파일을 생성합니다.

이제 __init__.py 파일 내에서 Flask를 가져오고 애플리케이션을 생성할 create_app() 함수를 정의합니다. 이제 Flask 인스턴스를 만들고 이를 app=Flask(__name__)와 같이 app 변수에 저장한 다음 이 개체를 반환합니다.

이제 앱에서 create_app 기능을 가져와야 하며 이 run.py 파일을 실행할 때 애플리케이션을 실행하려고 합니다. 이를 위해 다음 구문을 사용합니다.

응용 프로그램을 만들 때 응용 프로그램을 만들기 위해 함께 작동하는 여러 구성 요소를 만듭니다. app 디렉토리 안에 만들 수 있습니다. 이제 app 디렉토리 안에 main이라는 디렉토리를 만들고 이 main 디렉토리 안에 __init__.py 파일을 만들어 패키지로 만듭니다.

이제 routes.py 파일을 만들고 이 파일 내에서 Flask 모듈에서 Blueprint 클래스를 가져오고 청사진에 main이라는 이름을 지정하고 __name__을 전달합니다.

기본적으로 Flask 클래스를 사용하여 Flask 애플리케이션을 인스턴스화하는 것처럼 간단한 Flask 애플리케이션을 만드는 방법입니다.

main = Blueprint("main", __name__)

이제 라우팅 페이지에 대한 경로를 만들고 Main_Page() 함수를 정의한 다음 페이지를 반환합니다.

이제 app 디렉토리 안에 있는 __init__.py 파일에서 청사진을 등록해야 하므로 청사진 인스턴스를 생성한 app.main.routes에서 main을 가져옵니다. 그런 다음 app.register_blueprint()를 사용하여 청사진, 즉 main을 등록합니다.

같은 방식으로 일반 Flask 애플리케이션에 템플릿을 추가하면 템플릿이라는 디렉터리를 생성할 수 있으며 이 디렉터리 내에서 HTML 파일을 생성할 수 있습니다. Flask 애플리케이션의 구성도 제어할 수 있으며 이는 매우 간단합니다.

root 디렉토리 내에서 config.py 파일을 생성할 수 있으며 이 파일 내에서 Config라는 클래스를 생성할 수 있습니다. 이 클래스에는 TESTING이 있고 DEBUGFalse로 설정됩니다.

여기에서 Development라는 다른 클래스를 만들 수도 있습니다. 이 클래스는 Config에서 상속하고 DEBUGTrue로 덮어씁니다. Config에서 상속되는 TESTING이라는 클래스를 하나 더 정의합니다. TESTING 속성은 True와 같습니다.

많은 구성이 있을 수 있지만 구성을 사용하여 블루프린트 애플리케이션을 구성하는 방법을 이해할 수 있도록 간단하게 만들려고 합니다.

이제 우리는 사전이 될 config라는 변수를 생성할 것이며 이 사전은 해당 키의 값으로 DevelopmentTESTING 클래스를 가질 것입니다.

class Config(object):
    TESTING = False
    DEBUG = False


class Development(Config):
    DEBUG = True


class TESTING(Config):
    TESTING = True


config = {"development": Development, "testing": TESTING}

__init__.py 파일 내부로 돌아가서 Config 파일에서 config 사전을 가져옵니다. create_app() 함수 내부에 app_config를 전달하고 이 인수에 개발을 전달해야 합니다.

이제 app.config.from_object(config[app_config](/ko/howto/python/dotenv-python/))를 사용하여 Flask 앱을 전달하고 함수 블록 내에 이 코드를 작성해야 합니다. 이제 .env 파일 및 변수를 설정하는 데 유용한 [dotenv 패키지]를 설치합니다. 전체 애플리케이션에서 사용할 수 있고 쉽게 전환할 수 있기 때문입니다.

pip install python-dotenv

이제 .env 파일도 만들고 이 파일 내에서 프로덕션에서 개발까지 Flask 환경을 설정합니다. FLASK_ENV=development 코드와 같이 작성하고 저장하기만 하면 됩니다.

원하는 만큼 패키지를 만들 수 있으므로 이제 앱 디렉토리 내부로 이동하여 auth 패키지를 만들 수 있습니다. 이 패키지 대신 로그인 및 로그아웃 등을 가질 수 있습니다. 또한 일반 Flask 앱에서와 같이 정적 폴더를 만들고 정적 어설션을 이 디렉터리 안에 보관할 수 있습니다.

이제 처음에 생성한 run.py 파일을 실행합니다. 현재 환경이 프로덕션 모드가 아닌 개발 모드이고 앱이 제대로 작동하는 것을 볼 수 있습니다.

Flask 프로젝트 구조 - 출력 1

이 청사진 접근 방식은 애플리케이션을 훨씬 더 깔끔하게 만들고 보다 광범위한 애플리케이션을 구성할 수 있도록 구조화하는 데 도움이 됩니다.

run.py 파일의 코드:

from app import create_app

if __name__ == "__main__":
    create_app().run(debug=True)

__init__.py 파일의 코드:

from flask import Flask
from config import config


def create_app(app_config="development"):
    app = Flask(__name__)
    app.config.from_object(config[app_config])
    from app.main.routes import main

    app.register_blueprint(main)
    return app

routes.py 파일의 코드:

from flask import Blueprint

main = Blueprint("main", __name__)


@main.route("/", methods=["GET"])
def Main_Page():
    return "Hi there!"

이제 Flask 프로젝트 구조는 다음과 같습니다.

Flask 프로젝트 구조 - 출력 2

Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn